Merge branch 'master' into feature/plus4-tgi-driver
This commit is contained in:
15
.editorconfig
Normal file
15
.editorconfig
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 4
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
insert_final_newline = true
|
||||||
|
guidelines = 80, 120
|
||||||
|
|
||||||
|
[*.{c,h}]
|
||||||
|
cpp_new_line_before_open_brace_block=same_line
|
||||||
|
cpp_new_line_before_open_brace_function=new_line
|
||||||
|
cpp_space_before_function_open_parenthesis=insert
|
||||||
|
cpp_new_line_before_else=false
|
||||||
34
.github/checks/Makefile
vendored
Normal file
34
.github/checks/Makefile
vendored
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
|
||||||
|
ifneq ($(shell echo),)
|
||||||
|
CMD_EXE = 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef CMD_EXE
|
||||||
|
|
||||||
|
.PHONY: checkstyle
|
||||||
|
|
||||||
|
checkstyle:
|
||||||
|
$(info INFO: style checks require bash.)
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
.PHONY: checkstyle lineendings tabs lastline spaces noexec
|
||||||
|
|
||||||
|
checkstyle: lineendings tabs lastline spaces noexec
|
||||||
|
|
||||||
|
lineendings: lineendings.sh
|
||||||
|
@./lineendings.sh
|
||||||
|
|
||||||
|
tabs: tabs.sh
|
||||||
|
@./tabs.sh
|
||||||
|
|
||||||
|
lastline: lastline.sh
|
||||||
|
@./lastline.sh
|
||||||
|
|
||||||
|
spaces: spaces.sh
|
||||||
|
@./spaces.sh
|
||||||
|
|
||||||
|
noexec: noexec.sh
|
||||||
|
@./noexec.sh
|
||||||
|
|
||||||
|
endif
|
||||||
25
.github/checks/lastline.sh
vendored
Executable file
25
.github/checks/lastline.sh
vendored
Executable file
@@ -0,0 +1,25 @@
|
|||||||
|
#! /bin/bash
|
||||||
|
OLDCWD=`pwd`
|
||||||
|
SCRIPT_PATH=`dirname $0`
|
||||||
|
CHECK_PATH=.
|
||||||
|
|
||||||
|
cd $SCRIPT_PATH/../../
|
||||||
|
|
||||||
|
nl='
|
||||||
|
'
|
||||||
|
nl=$'\n'
|
||||||
|
r1="${nl}$"
|
||||||
|
FILES=`find $CHECK_PATH -type f -size +0 \( -name \*.inc -o -name Makefile -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.mac -o -name \*.asm -o -name \*.sgml \) -print | while read f; do
|
||||||
|
t=$(tail -c2 $f; printf x)
|
||||||
|
[[ ${t%x} =~ $r1 ]] || echo "$f"
|
||||||
|
done`
|
||||||
|
|
||||||
|
cd $OLDCWD
|
||||||
|
|
||||||
|
if [ x"$FILES"x != xx ]; then
|
||||||
|
echo "error: found following files that have no newline at the end:" >&2
|
||||||
|
for n in $FILES; do
|
||||||
|
echo $n >&2
|
||||||
|
done
|
||||||
|
exit -1
|
||||||
|
fi
|
||||||
18
.github/checks/lineendings.sh
vendored
Executable file
18
.github/checks/lineendings.sh
vendored
Executable file
@@ -0,0 +1,18 @@
|
|||||||
|
#! /bin/bash
|
||||||
|
OLDCWD=`pwd`
|
||||||
|
SCRIPT_PATH=`dirname $0`
|
||||||
|
CHECK_PATH=.
|
||||||
|
|
||||||
|
cd $SCRIPT_PATH/../../
|
||||||
|
|
||||||
|
FILES=`find $CHECK_PATH -type f \( -name \*.inc -o -name Makefile -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.mac -o -name \*.asm -o -name \*.sgml \) -print | grep -v "libwrk/" | grep -v "testwrk/" | xargs grep -IUl $'\r'`
|
||||||
|
|
||||||
|
cd $OLDCWD
|
||||||
|
|
||||||
|
if [ x"$FILES"x != xx ]; then
|
||||||
|
echo "error: found CR in the following files:" >&2
|
||||||
|
for n in $FILES; do
|
||||||
|
echo $n >&2
|
||||||
|
done
|
||||||
|
exit -1
|
||||||
|
fi
|
||||||
18
.github/checks/noexec.sh
vendored
Executable file
18
.github/checks/noexec.sh
vendored
Executable file
@@ -0,0 +1,18 @@
|
|||||||
|
#! /bin/bash
|
||||||
|
OLDCWD=`pwd`
|
||||||
|
SCRIPT_PATH=`dirname $0`
|
||||||
|
CHECK_PATH=.
|
||||||
|
|
||||||
|
cd $SCRIPT_PATH/../../
|
||||||
|
|
||||||
|
FILES=`find $CHECK_PATH -executable -type f \( -name \*.inc -o -name Makefile -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.mac -o -name \*.asm -o -name \*.sgml \) -print`
|
||||||
|
|
||||||
|
cd $OLDCWD
|
||||||
|
|
||||||
|
if [ x"$FILES"x != xx ]; then
|
||||||
|
echo "error: executable flag is set for the following files:" >&2
|
||||||
|
for n in $FILES; do
|
||||||
|
echo $n >&2
|
||||||
|
done
|
||||||
|
exit -1
|
||||||
|
fi
|
||||||
18
.github/checks/spaces.sh
vendored
Executable file
18
.github/checks/spaces.sh
vendored
Executable file
@@ -0,0 +1,18 @@
|
|||||||
|
#! /bin/bash
|
||||||
|
OLDCWD=`pwd`
|
||||||
|
SCRIPT_PATH=`dirname $0`
|
||||||
|
CHECK_PATH=.
|
||||||
|
|
||||||
|
cd $SCRIPT_PATH/../../
|
||||||
|
|
||||||
|
FILES=`find $CHECK_PATH -type f \( -name \*.inc -o -name Makefile -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.mac -o -name \*.asm -o -name \*.sgml \) -print | grep -v "test/" | grep -v "libwrk/" | grep -v "testwrk/" | xargs grep -l ' $'`
|
||||||
|
|
||||||
|
cd $OLDCWD
|
||||||
|
|
||||||
|
if [ x"$FILES"x != xx ]; then
|
||||||
|
echo "error: found dangling spaces in the following files:" >&2
|
||||||
|
for n in $FILES; do
|
||||||
|
echo $n >&2
|
||||||
|
done
|
||||||
|
exit -1
|
||||||
|
fi
|
||||||
18
.github/checks/tabs.sh
vendored
Executable file
18
.github/checks/tabs.sh
vendored
Executable file
@@ -0,0 +1,18 @@
|
|||||||
|
#! /bin/bash
|
||||||
|
OLDCWD=`pwd`
|
||||||
|
SCRIPT_PATH=`dirname $0`
|
||||||
|
CHECK_PATH=.
|
||||||
|
|
||||||
|
cd $SCRIPT_PATH/../../
|
||||||
|
|
||||||
|
FILES=`find $CHECK_PATH -type f \( \( -name \*.inc -a \! -name Makefile.inc \) -o -name \*.cfg -o -name \*.\[chs\] -o -name \*.mac -o -name \*.asm -o -name \*.sgml \) -print | grep -v "test/" | grep -v "libwrk/" | grep -v "testwrk/" | xargs grep -l $'\t'`
|
||||||
|
|
||||||
|
cd $OLDCWD
|
||||||
|
|
||||||
|
if [ x"$FILES"x != xx ]; then
|
||||||
|
echo "error: found TABs in the following files:" >&2
|
||||||
|
for n in $FILES; do
|
||||||
|
echo $n >&2
|
||||||
|
done
|
||||||
|
exit -1
|
||||||
|
fi
|
||||||
92
.github/workflows/build-on-pull-request.yml
vendored
Normal file
92
.github/workflows/build-on-pull-request.yml
vendored
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
name: Build Pull Request
|
||||||
|
on: [pull_request]
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build_linux:
|
||||||
|
name: Build and Test (Linux)
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Install Dependencies
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install linuxdoc-tools-info gcc-mingw-w64-x86-64
|
||||||
|
|
||||||
|
- shell: bash
|
||||||
|
run: git config --global core.autocrlf input
|
||||||
|
- name: Checkout Source
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Do some simple style checks
|
||||||
|
shell: bash
|
||||||
|
run: make -j2 checkstyle
|
||||||
|
- name: Build the tools.
|
||||||
|
shell: bash
|
||||||
|
run: make -j2 bin USER_CFLAGS=-Werror
|
||||||
|
- name: Build the utilities.
|
||||||
|
shell: bash
|
||||||
|
run: make -j2 util
|
||||||
|
- name: Build the platform libraries.
|
||||||
|
shell: bash
|
||||||
|
run: make -j2 lib QUIET=1
|
||||||
|
- name: Run the regression tests.
|
||||||
|
shell: bash
|
||||||
|
run: make -j2 test QUIET=1
|
||||||
|
- name: Test that the samples can be built.
|
||||||
|
run: make -C samples platforms
|
||||||
|
- name: Test that the targettest programs can be built.
|
||||||
|
run: make -C targettest platforms
|
||||||
|
- name: Build the document files.
|
||||||
|
shell: bash
|
||||||
|
run: make -j2 doc
|
||||||
|
- name: Upload a documents snapshot.
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: docs
|
||||||
|
path: ./html
|
||||||
|
- name: Build 64-bit Windows versions of the tools.
|
||||||
|
run: |
|
||||||
|
make -C src clean
|
||||||
|
make -j2 bin USER_CFLAGS=-Werror CROSS_COMPILE=x86_64-w64-mingw32-
|
||||||
|
|
||||||
|
build_windows:
|
||||||
|
name: Build and Test (Windows)
|
||||||
|
runs-on: windows-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- shell: bash
|
||||||
|
run: git config --global core.autocrlf input
|
||||||
|
|
||||||
|
- name: Checkout Source
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Add msbuild to PATH
|
||||||
|
uses: microsoft/setup-msbuild@v2
|
||||||
|
|
||||||
|
- name: Build app (x86 debug)
|
||||||
|
run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Debug -property:Platform=Win32
|
||||||
|
|
||||||
|
- name: Build app (x86 release)
|
||||||
|
run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release -property:Platform=Win32
|
||||||
|
|
||||||
|
- name: Build app (x64 release)
|
||||||
|
run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Debug -property:Platform=x64
|
||||||
|
|
||||||
|
- name: Build app (x64 release)
|
||||||
|
run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release -property:Platform=x64
|
||||||
|
|
||||||
|
- name: Build utils (MinGW)
|
||||||
|
shell: cmd
|
||||||
|
run: make -j2 util SHELL=cmd
|
||||||
|
|
||||||
|
- name: Build the platform libraries (make lib)
|
||||||
|
shell: cmd
|
||||||
|
run: make -j2 lib QUIET=1 SHELL=cmd
|
||||||
|
|
||||||
|
- name: Run the regression tests (make test)
|
||||||
|
shell: cmd
|
||||||
|
run: make -j2 test QUIET=1 SHELL=cmd
|
||||||
157
.github/workflows/snapshot-on-push-master.yml
vendored
Normal file
157
.github/workflows/snapshot-on-push-master.yml
vendored
Normal file
@@ -0,0 +1,157 @@
|
|||||||
|
name: Snapshot Build
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
master
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build_windows:
|
||||||
|
name: Build (Windows)
|
||||||
|
if: github.repository == 'cc65/cc65'
|
||||||
|
runs-on: windows-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- shell: bash
|
||||||
|
run: git config --global core.autocrlf input
|
||||||
|
|
||||||
|
- name: Checkout Source
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Add msbuild to PATH
|
||||||
|
uses: microsoft/setup-msbuild@v2
|
||||||
|
|
||||||
|
- name: Build app (debug)
|
||||||
|
run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Debug
|
||||||
|
|
||||||
|
- name: Build app (release)
|
||||||
|
run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release
|
||||||
|
|
||||||
|
build_linux:
|
||||||
|
name: Build, Test, and Snapshot (Linux)
|
||||||
|
if: github.repository == 'cc65/cc65'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Install Dependencies
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install linuxdoc-tools-info gcc-mingw-w64-x86-64 gcc-mingw-w64-i686
|
||||||
|
|
||||||
|
- shell: bash
|
||||||
|
run: git config --global core.autocrlf input
|
||||||
|
- name: Checkout Source
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Do some simple style checks
|
||||||
|
shell: bash
|
||||||
|
run: make -j2 checkstyle
|
||||||
|
- name: Build the tools.
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
make -j2 bin USER_CFLAGS=-Werror
|
||||||
|
make -j2 util
|
||||||
|
- name: Build the platform libraries.
|
||||||
|
shell: bash
|
||||||
|
run: make -j2 lib QUIET=1
|
||||||
|
- name: Run the regression tests.
|
||||||
|
shell: bash
|
||||||
|
run: make -j2 test QUIET=1
|
||||||
|
- name: Test that the samples can be built.
|
||||||
|
shell: bash
|
||||||
|
run: make -j2 samples
|
||||||
|
- name: Remove the output from the samples tests.
|
||||||
|
shell: bash
|
||||||
|
run: make -C samples clean
|
||||||
|
- name: Remove programs in util directory
|
||||||
|
shell: bash
|
||||||
|
run: make -C util clean
|
||||||
|
- name: Build the document files.
|
||||||
|
shell: bash
|
||||||
|
run: make -j2 doc
|
||||||
|
- name: Build and package 64-bit Windows versions of the tools.
|
||||||
|
run: |
|
||||||
|
make -C src clean
|
||||||
|
make -j2 bin USER_CFLAGS=-Werror CROSS_COMPILE=x86_64-w64-mingw32-
|
||||||
|
make zip
|
||||||
|
mv cc65.zip cc65-snapshot-win64.zip
|
||||||
|
- name: Build and package 32-bit Windows versions of the tools.
|
||||||
|
run: |
|
||||||
|
make -C src clean
|
||||||
|
make -j2 bin USER_CFLAGS=-Werror CROSS_COMPILE=i686-w64-mingw32-
|
||||||
|
make zip
|
||||||
|
mv cc65.zip cc65-snapshot-win32.zip
|
||||||
|
|
||||||
|
- name: Upload a 32-bit Snapshot Zip
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: cc65-snapshot-win32
|
||||||
|
path: cc65-snapshot-win32.zip
|
||||||
|
- name: Upload a 64-bit Snapshot Zip
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: cc65-snapshot-win64
|
||||||
|
path: cc65-snapshot-win64.zip
|
||||||
|
|
||||||
|
- name: Get the online documents repo.
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
repository: cc65/doc
|
||||||
|
# this token will expire, if it does, generate a new one as decribed in https://github.com/cc65/cc65/issues/2065
|
||||||
|
# - apparently only a "classic" token works here
|
||||||
|
# - the token must exist in the cc65/cc65 repo
|
||||||
|
token: ${{ secrets.DOC_PAT }} # use secret token instead of default
|
||||||
|
path: doc.git
|
||||||
|
- name: Update the online documents.
|
||||||
|
run: |
|
||||||
|
cd doc.git
|
||||||
|
rm *.*
|
||||||
|
cp ../html/*.* .
|
||||||
|
git config user.name "cc65-github"
|
||||||
|
git config user.email "cc65.nomail@github.com"
|
||||||
|
git config push.default simple
|
||||||
|
git add -A
|
||||||
|
# prevent failure when there is nothing to commit
|
||||||
|
git diff-index --quiet HEAD || git commit -m "Updated from https://github.com/cc65/cc65/commit/${GITHUB_SHA}"
|
||||||
|
git push
|
||||||
|
- name: Package offline documents.
|
||||||
|
run: 7z a cc65-snapshot-docs.zip ./html/*.*
|
||||||
|
- name: Upload a Documents Snapshot Zip
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: cc65-snapshot-docs
|
||||||
|
path: cc65-snapshot-docs.zip
|
||||||
|
|
||||||
|
# enter secrets under "repository secrets"
|
||||||
|
- name: Upload 32-bit Windows snapshot to sourceforge
|
||||||
|
uses: nogsantos/scp-deploy@master
|
||||||
|
with:
|
||||||
|
src: cc65-snapshot-win32.zip
|
||||||
|
host: ${{ secrets.SSH_HOST }}
|
||||||
|
remote: ${{ secrets.SSH_DIR }}
|
||||||
|
port: ${{ secrets.SSH_PORT }}
|
||||||
|
user: ${{ secrets.SSH_USER }}
|
||||||
|
key: ${{ secrets.SSH_KEY }}
|
||||||
|
- name: Upload 64-bit Windows snapshot to sourceforge
|
||||||
|
uses: nogsantos/scp-deploy@master
|
||||||
|
with:
|
||||||
|
src: cc65-snapshot-win64.zip
|
||||||
|
host: ${{ secrets.SSH_HOST }}
|
||||||
|
remote: ${{ secrets.SSH_DIR }}
|
||||||
|
port: ${{ secrets.SSH_PORT }}
|
||||||
|
user: ${{ secrets.SSH_USER }}
|
||||||
|
key: ${{ secrets.SSH_KEY }}
|
||||||
|
- name: Upload documents snapshot to sourceforge
|
||||||
|
uses: nogsantos/scp-deploy@master
|
||||||
|
with:
|
||||||
|
src: cc65-snapshot-docs.zip
|
||||||
|
host: ${{ secrets.SSH_HOST }}
|
||||||
|
remote: ${{ secrets.SSH_DIR }}
|
||||||
|
port: ${{ secrets.SSH_PORT }}
|
||||||
|
user: ${{ secrets.SSH_USER }}
|
||||||
|
key: ${{ secrets.SSH_KEY }}
|
||||||
|
|
||||||
|
# TODO: Publish snapshot zip at https://github.com/cc65/cc65.github.io
|
||||||
78
.github/workflows/windows-test-scheduled.yml
vendored
Normal file
78
.github/workflows/windows-test-scheduled.yml
vendored
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
name: Windows Test Scheduled
|
||||||
|
# Scheduled or manually dispatched because it's slower than the Linux test.
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: '0 0 */1 * *'
|
||||||
|
# every 1 days
|
||||||
|
workflow_dispatch:
|
||||||
|
# allow manual dispatch
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
# don't run more than once at a time
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build_windows:
|
||||||
|
name: Build, Test (Windows MSVC)
|
||||||
|
runs-on: windows-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
|
||||||
|
# This cache is used to remember the last build.
|
||||||
|
# If there are no changes and the last build was successful,
|
||||||
|
# the build and test steps will be omitted.
|
||||||
|
# If the last build failed, the full attempt will be repeated.
|
||||||
|
# Github Actions will retain the last build cache for up to 7 days.
|
||||||
|
|
||||||
|
- name: Create Cache
|
||||||
|
shell: bash
|
||||||
|
run: mkdir ~/.cache-sha
|
||||||
|
|
||||||
|
- name: Cache SHA
|
||||||
|
uses: actions/cache@v4
|
||||||
|
id: check-sha
|
||||||
|
with:
|
||||||
|
path: ~/.cache-sha
|
||||||
|
key: cache-sha-wintest-${{ github.sha }}
|
||||||
|
|
||||||
|
- name: Git Setup
|
||||||
|
if: steps.check-sha.outputs.cache-hit != 'true'
|
||||||
|
shell: bash
|
||||||
|
run: git config --global core.autocrlf input
|
||||||
|
|
||||||
|
- name: Checkout source
|
||||||
|
if: steps.check-sha.outputs.cache-hit != 'true'
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Add msbuild to PATH
|
||||||
|
if: steps.check-sha.outputs.cache-hit != 'true'
|
||||||
|
uses: microsoft/setup-msbuild@v2
|
||||||
|
|
||||||
|
- name: Build app (MSVC debug)
|
||||||
|
if: steps.check-sha.outputs.cache-hit != 'true'
|
||||||
|
run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Debug
|
||||||
|
|
||||||
|
- name: Build app (MSVC release)
|
||||||
|
if: steps.check-sha.outputs.cache-hit != 'true'
|
||||||
|
run: msbuild src\cc65.sln -t:rebuild -property:Configuration=Release
|
||||||
|
|
||||||
|
- name: Build utils (MinGW)
|
||||||
|
if: steps.check-sha.outputs.cache-hit != 'true'
|
||||||
|
shell: cmd
|
||||||
|
run: make -j2 util SHELL=cmd
|
||||||
|
|
||||||
|
- name: Build the platform libraries (make lib)
|
||||||
|
if: steps.check-sha.outputs.cache-hit != 'true'
|
||||||
|
shell: cmd
|
||||||
|
run: make -j2 lib QUIET=1 SHELL=cmd
|
||||||
|
|
||||||
|
- name: Run the regression tests (make test)
|
||||||
|
if: steps.check-sha.outputs.cache-hit != 'true'
|
||||||
|
shell: cmd
|
||||||
|
run: make -j2 test QUIET=1 SHELL=cmd
|
||||||
|
|
||||||
|
- name: Test that the samples can be built (make samples)
|
||||||
|
if: steps.check-sha.outputs.cache-hit != 'true'
|
||||||
|
shell: cmd
|
||||||
|
run: make -j2 samples SHELL=cmd
|
||||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -7,3 +7,6 @@
|
|||||||
/testwrk/
|
/testwrk/
|
||||||
/wrk/
|
/wrk/
|
||||||
/cc65.zip
|
/cc65.zip
|
||||||
|
/util/atari/*.exe
|
||||||
|
/util/gamate/*.exe
|
||||||
|
|
||||||
|
|||||||
40
.travis.yml
40
.travis.yml
@@ -1,14 +1,26 @@
|
|||||||
language:
|
language: c
|
||||||
- c
|
|
||||||
install:
|
jobs:
|
||||||
- sudo apt-get update
|
include:
|
||||||
- sudo apt-get install linuxdoc-tools linuxdoc-tools-info binutils-mingw-w64-i686 gcc-mingw-w64-i686 sshpass
|
|
||||||
script:
|
- os: linux
|
||||||
- make bin USER_CFLAGS=-Werror
|
name: Linux
|
||||||
- make lib QUIET=1
|
install:
|
||||||
- make -C test QUIET=1
|
- sudo apt-get update
|
||||||
- make -C src clean
|
- sudo apt-get install linuxdoc-tools linuxdoc-tools-info binutils-mingw-w64-i686 gcc-mingw-w64-i686 sshpass
|
||||||
- make bin USER_CFLAGS=-Werror CROSS_COMPILE=i686-w64-mingw32-
|
script:
|
||||||
- make doc zip
|
- make -j2 bin USER_CFLAGS=-Werror
|
||||||
after_success:
|
- make -j2 lib QUIET=1
|
||||||
- make -f Makefile.travis
|
- make test QUIET=1
|
||||||
|
- make -j2 samples
|
||||||
|
- make -C src clean
|
||||||
|
- make -j2 bin USER_CFLAGS=-Werror CROSS_COMPILE=i686-w64-mingw32-
|
||||||
|
- make -C samples clean
|
||||||
|
- make -j2 doc zip
|
||||||
|
after_success:
|
||||||
|
- make -f Makefile.travis
|
||||||
|
|
||||||
|
- os: windows
|
||||||
|
name: Windows
|
||||||
|
script:
|
||||||
|
- src/msbuild.cmd src\\cc65.sln
|
||||||
|
|||||||
366
Contributing.md
Normal file
366
Contributing.md
Normal file
@@ -0,0 +1,366 @@
|
|||||||
|
Contributing to cc65
|
||||||
|
====================
|
||||||
|
|
||||||
|
This document contains all kinds of information that you
|
||||||
|
should know if you want to contribute to the cc65 project.
|
||||||
|
Before you start, please read all of it. If something is not
|
||||||
|
clear to you, please ask - this document is an ongoing effort
|
||||||
|
and may well be incomplete.
|
||||||
|
|
||||||
|
Also, before you put a lot of work into implementing
|
||||||
|
something you want to contribute, please get in touch with
|
||||||
|
one of the developers and ask if what you are going to do is
|
||||||
|
actually wanted and has a chance of being merged. Perhaps
|
||||||
|
someone else is already working on it, or perhaps what you
|
||||||
|
have in mind is not how we'd expect it to be - talking to us
|
||||||
|
before you start might save you a lot of work in those cases.
|
||||||
|
|
||||||
|
(''Note:'' The word "must" indicates a requirement. The word
|
||||||
|
"should" indicates a recomendation.)
|
||||||
|
|
||||||
|
*this is work in progress and is constantly updated - if in
|
||||||
|
doubt, please ask*
|
||||||
|
|
||||||
|
# Generally
|
||||||
|
|
||||||
|
* You must obey these rules when contributing new code or
|
||||||
|
documentation to cc65. We are well aware that not all
|
||||||
|
existing code may respect all rules outlined here - but this
|
||||||
|
is no reason for you not to respect them.
|
||||||
|
* One commit/patch/PR per issue. Do not mix several things
|
||||||
|
unless they are very closely related.
|
||||||
|
* Sometimes when you make a PR, it may break completely
|
||||||
|
unrelated tests. However, any PR is expected to merge
|
||||||
|
cleanly with no failures. That means in practise that you
|
||||||
|
are expected to fix/update the failing tests if required -
|
||||||
|
for example this might be needed if you make changes to the
|
||||||
|
compiler that changes the format of error- or warning
|
||||||
|
messages. In that case you might have to update some
|
||||||
|
reference files in the testbench. Obviously still check if
|
||||||
|
that is actually the right thing to do. ;)
|
||||||
|
|
||||||
|
# Codestyle rules
|
||||||
|
|
||||||
|
## All sources
|
||||||
|
|
||||||
|
### Line endings
|
||||||
|
|
||||||
|
All files must only contain Unix style 'LF' line endings.
|
||||||
|
Please configure your editors accordingly.
|
||||||
|
|
||||||
|
### TABs and spaces
|
||||||
|
|
||||||
|
This is an ongoing controversial topic - everyone knows
|
||||||
|
that. However, the following is how we do it :)
|
||||||
|
|
||||||
|
* TAB characters must be expanded to spaces.
|
||||||
|
* 4 spaces per indention level (rather than 8) are
|
||||||
|
preferred, especially if there are many different levels.
|
||||||
|
* No extra spaces at the end of lines.
|
||||||
|
* All text files must end with new-line characters. Don't
|
||||||
|
leave the last line "dangling".
|
||||||
|
|
||||||
|
The (bash) scripts used to check the above rules can be
|
||||||
|
found in ```.github/check```. You can also run all checks
|
||||||
|
using ```make check```.
|
||||||
|
|
||||||
|
### Identifiers and symbol names
|
||||||
|
|
||||||
|
The C Standard defines certain identifiers and symbol names,
|
||||||
|
which we can not use in our code. Since it is not always
|
||||||
|
obvious which parts of the library code will actually end up
|
||||||
|
in a linked program, the following applies to ALL of the
|
||||||
|
library.
|
||||||
|
|
||||||
|
Any non standard identifier/symbol/function that is exported
|
||||||
|
from source files, or appears in header files:
|
||||||
|
|
||||||
|
* must not be in the "_symbol" form in C, or "__symbol" form
|
||||||
|
in assembly,
|
||||||
|
* must start with (at least) two (C Code) or three (assembly
|
||||||
|
code) underscores, unless the symbol appears in a non
|
||||||
|
standard header file.
|
||||||
|
|
||||||
|
This is likely more than the standard dictates us to do -
|
||||||
|
but it is certainly standard compliant - and easy to
|
||||||
|
remember.
|
||||||
|
|
||||||
|
Also see the discussion in
|
||||||
|
https://github.com/cc65/cc65/issues/1796
|
||||||
|
|
||||||
|
### Miscellaneous
|
||||||
|
|
||||||
|
* 80 characters is the desired maximum width of files. But,
|
||||||
|
it isn't a "strong" rule; sometimes, you will want to type
|
||||||
|
longer lines, in order to keep the parts of expressions or
|
||||||
|
comments together on the same line.
|
||||||
|
* You should avoid typing non-ASCII characters.
|
||||||
|
* If you change "normal" source code into comments, then you
|
||||||
|
must add a comment about why that code is a comment.
|
||||||
|
* When you want to create a comment from several lines of
|
||||||
|
code, you should use preprocessor lines, instead of ```/*
|
||||||
|
*/``` or "```;```". Example:
|
||||||
|
|
||||||
|
~~~C
|
||||||
|
#if 0
|
||||||
|
one (); two ();
|
||||||
|
three = two () + one ();
|
||||||
|
#endif
|
||||||
|
~~~
|
||||||
|
|
||||||
|
* You should type upper case characters for hex values.
|
||||||
|
* When you type zero-page addresses in hexadecimal, you
|
||||||
|
should type two hex characters (after the hex prefix).
|
||||||
|
When you type non-zero-page addresses in hex, you should
|
||||||
|
type four hex characters.
|
||||||
|
* When you type lists of addresses, it is a good idea to
|
||||||
|
sort them in ascending numerical order. That makes it
|
||||||
|
easier for readers to build mental pictures of where things
|
||||||
|
are in an address space. And, it is easier to see how big
|
||||||
|
the variables and buffers are. Example:
|
||||||
|
|
||||||
|
~~~asm
|
||||||
|
xCoord := $0703
|
||||||
|
yCoord := $0705 ; (this address implies that xCoord is 16 bits)
|
||||||
|
cmdbuf := $0706 ; (this address implies that yCoord is 8 bits)
|
||||||
|
cmdlen := $0786 ; (this address implies that cmdbuf is 128 bytes)
|
||||||
|
color := $0787
|
||||||
|
~~~
|
||||||
|
|
||||||
|
## C sources
|
||||||
|
|
||||||
|
The following is still very incomplete - if in doubt please
|
||||||
|
look at existing sourcefiles and adapt to the existing style.
|
||||||
|
|
||||||
|
Your files should generally obey the C89 standard, with a
|
||||||
|
few C99 things (this is a bit similar to what cc65 itself
|
||||||
|
supports). The exceptions are:
|
||||||
|
|
||||||
|
* Use stdint.h for variables that require a certain bit size
|
||||||
|
* In printf-style functions use the PRIX64 (and similar)
|
||||||
|
macros to deal with 64bit values (from inttypes.h) This
|
||||||
|
list is not necessarily complete - if in doubt, please ask.
|
||||||
|
* We generally have a "no warnings" policy
|
||||||
|
* Warnings must not be hidden by using typecasts - fix the
|
||||||
|
code instead
|
||||||
|
* The normal indentation width should be four spaces.
|
||||||
|
* You must use ANSI C comments (```/* */```); you must not
|
||||||
|
use C++ comments (```//```).
|
||||||
|
* When you add functions to an existing file, you should
|
||||||
|
separate them by the same number of blank lines that
|
||||||
|
separate the functions that already are in that file.
|
||||||
|
* All function declarations must be followed by a comment
|
||||||
|
block that tells at least briefly what the function does,
|
||||||
|
what the parameters are, and what is returned. This comment
|
||||||
|
must sit between the declaration and the function body, like
|
||||||
|
this:
|
||||||
|
|
||||||
|
~~~C
|
||||||
|
int foo(int bar)
|
||||||
|
/* Add 1 to bar, takes bar and returns the result */
|
||||||
|
{
|
||||||
|
return bar + 1;
|
||||||
|
}
|
||||||
|
~~~
|
||||||
|
|
||||||
|
* When a function's argument list wraps around to a next
|
||||||
|
line, you should indent that next line by either the
|
||||||
|
normal width or enough spaces to align it with the arguments
|
||||||
|
on the previous line.
|
||||||
|
* All declarations in a block must be at the beginning of
|
||||||
|
that block.
|
||||||
|
* You should put a blank line between a list of local
|
||||||
|
variable declarations and the first line of code.
|
||||||
|
* Always use curly braces even for single statements after
|
||||||
|
```if```, and the single statement should go into a new
|
||||||
|
line.
|
||||||
|
* Use "cuddling" braces, ie the opening brace goes in the
|
||||||
|
same line as the ```if```:
|
||||||
|
|
||||||
|
~~~C
|
||||||
|
if (foo > 42) {
|
||||||
|
bar = 23;
|
||||||
|
}
|
||||||
|
~~~
|
||||||
|
|
||||||
|
* Should the ```if``` statement be followed by an empty
|
||||||
|
conditional block, there should be a comment telling why
|
||||||
|
this is the case:
|
||||||
|
|
||||||
|
~~~C
|
||||||
|
if (check()) { /* nothing happened, do nothing */ }
|
||||||
|
~~~
|
||||||
|
|
||||||
|
* You must separate function names and parameter/argument
|
||||||
|
lists by one space.
|
||||||
|
* When declaring/defining pointers, you must put the
|
||||||
|
asterisk (```*```) next to the data type, with a space
|
||||||
|
between it and the variable's name. Examples:
|
||||||
|
|
||||||
|
~~~C
|
||||||
|
int* namedPtr[5];
|
||||||
|
char* nextLine (FILE* f);
|
||||||
|
~~~
|
||||||
|
|
||||||
|
### Header files
|
||||||
|
|
||||||
|
* All Headers should start with a copyright/license banner
|
||||||
|
* Function prototypes must be a single line, not contain the redundant
|
||||||
|
"extern" keyword, and followed by a brief comment that explains what
|
||||||
|
the function does, and separated from the next prototype by a blank
|
||||||
|
line:
|
||||||
|
|
||||||
|
~~~C
|
||||||
|
void __fastcall__ cclear (unsigned char length);
|
||||||
|
/* Clear part of a line (write length spaces). */
|
||||||
|
|
||||||
|
~~~
|
||||||
|
|
||||||
|
Headers that belong to the standard library (libc) must
|
||||||
|
conform with the C standard. That means:
|
||||||
|
|
||||||
|
* All non standard functions, or functions that only exist
|
||||||
|
in a certain standard, should be in #ifdefs
|
||||||
|
* The same is true for macros or typedefs.
|
||||||
|
You can refer to Annex B of the ISO C99 standard
|
||||||
|
([here](https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf)
|
||||||
|
is the draft). Example:
|
||||||
|
|
||||||
|
~~~C
|
||||||
|
#if __CC65_STD__ == __CC65_STD_C99__ /* stuff that only exists in C99 here */
|
||||||
|
#endif
|
||||||
|
#if __CC65_STD__ == __CC65_STD_CC65__ /* non standard stuff here */
|
||||||
|
#endif </pre>
|
||||||
|
~~~
|
||||||
|
|
||||||
|
## Assembly sources
|
||||||
|
|
||||||
|
* Opcode mnemonics must have lower-case letters. The names
|
||||||
|
of instruction macroes may have upper-case letters.
|
||||||
|
* Opcodes must use their official and commonly used
|
||||||
|
mnemonics, ie 'bcc' and 'bcs' and not 'bgt' and 'blt'.
|
||||||
|
* Hexadecimal number constants should be used except where
|
||||||
|
decimal or binary numbers make much more sense in that
|
||||||
|
constant's context.
|
||||||
|
* Hexadecimal letters should be upper-case.
|
||||||
|
* When you set two registers or two memory locations to an
|
||||||
|
immediate 16-bit zero, you should use the expressions
|
||||||
|
```#<$0000``` and ```#>$0000``` (they make it obvious where
|
||||||
|
you are putting the lower and upper bytes).
|
||||||
|
* If a function is declared to return a char-sized value, it
|
||||||
|
actually must return an integer-sized value. (When cc65
|
||||||
|
promotes a returned value, it sometimes assumes that the value
|
||||||
|
already is an integer.)
|
||||||
|
This must be done in one of the following ways:
|
||||||
|
|
||||||
|
~~~asm
|
||||||
|
lda #RETURN_VALUE
|
||||||
|
ldx #0 ; Promote char return value
|
||||||
|
|
||||||
|
; If the value is 0, you can use:
|
||||||
|
lda #RETURN_VALUE
|
||||||
|
.assert RETURN_VALUE = 0
|
||||||
|
tax
|
||||||
|
|
||||||
|
; Sometimes jumping to 'return 0' could save a byte:
|
||||||
|
.assert RETURN_VALUE = 0
|
||||||
|
jmp return 0
|
||||||
|
~~~
|
||||||
|
|
||||||
|
* Functions, that are intended for a platform's system
|
||||||
|
library, should be optimized as much as possible.
|
||||||
|
* Sometimes, there must be a trade-off between size and
|
||||||
|
speed. If you think that a library function won't be used
|
||||||
|
often, then you should make it small. Otherwise, you should
|
||||||
|
make it fast.
|
||||||
|
* Comments that are put on the right side of instructions
|
||||||
|
must be aligned (start in the same character columns).
|
||||||
|
* Assembly source fields (label, operation, operand,
|
||||||
|
comment) should start ''after'' character columns that are
|
||||||
|
multiples of eight (such as 1, 9, 17, 33, and 41).
|
||||||
|
|
||||||
|
## LinuxDoc sources
|
||||||
|
|
||||||
|
* TAB characters must be expanded to spaces.
|
||||||
|
* All text files must end with new-line characters. Don't
|
||||||
|
leave the last line "dangling".
|
||||||
|
* 80 characters is the desired maximum width of files.
|
||||||
|
* You should avoid typing non-ASCII characters.
|
||||||
|
|
||||||
|
* You should put blank lines between LinuxDoc sections:
|
||||||
|
* Three blank lines between ```<sect>``` sections.
|
||||||
|
* Two blank lines between ```<sect1>``` sections.
|
||||||
|
* One blank line between other sections.
|
||||||
|
|
||||||
|
# Library implementation rules
|
||||||
|
|
||||||
|
* By default the toolchain must output a "standard" binary
|
||||||
|
for the platform, no emulator formats, no extra headers
|
||||||
|
used by tools. If the resulting binaries can not be run as
|
||||||
|
is on emulators or eg flash cartridges, the process of
|
||||||
|
converting them to something that can be used with these
|
||||||
|
should be documented in the user manual.
|
||||||
|
* Generally every function should live in a seperate source
|
||||||
|
file - unless the functions are so closely related that
|
||||||
|
splitting makes no sense.
|
||||||
|
* Source files should not contain commented out code - if
|
||||||
|
they do, there should be a comment that explains why that
|
||||||
|
commented out code exists.
|
||||||
|
|
||||||
|
# Makefile rules
|
||||||
|
|
||||||
|
* Makefiles must generally work on both *nix (ba)sh and
|
||||||
|
windows cmd.exe.
|
||||||
|
* Makefiles must not use external tools that are not
|
||||||
|
provided by the cc65 toolchain itself.
|
||||||
|
|
||||||
|
The only exception to the above are actions that are exclusive
|
||||||
|
to the github actions - those may rely on bash and/or linux tools.
|
||||||
|
|
||||||
|
# Documentation rules
|
||||||
|
|
||||||
|
## User manual (LinuxDoc)
|
||||||
|
|
||||||
|
* This is the primary documentation.
|
||||||
|
|
||||||
|
## Wiki
|
||||||
|
|
||||||
|
* The Wiki is strictly for additional information that does
|
||||||
|
not fit into the regular user manual (LinuxDoc). The wiki
|
||||||
|
must not duplicate any information that is present in the
|
||||||
|
user manual.
|
||||||
|
|
||||||
|
# Roadmap / TODOs / open ends
|
||||||
|
|
||||||
|
## Documentation
|
||||||
|
|
||||||
|
* The printf() family of functions does not completely
|
||||||
|
implement all printf() modifiers and does not behave as
|
||||||
|
expected in some cases - all this should be documented in
|
||||||
|
detail.
|
||||||
|
|
||||||
|
## Compiler
|
||||||
|
|
||||||
|
* We need a way that makes it possible to feed arbitrary
|
||||||
|
assembler code into the optimzer, so we can have proper
|
||||||
|
tests for it.
|
||||||
|
|
||||||
|
### Floating point support
|
||||||
|
|
||||||
|
The first step is implementing the datatype "float" as IEEE
|
||||||
|
754 floats. Help welcomed!
|
||||||
|
|
||||||
|
* WIP compiler/library changes are here:
|
||||||
|
https://github.com/cc65/cc65/pull/1777
|
||||||
|
|
||||||
|
## Library
|
||||||
|
|
||||||
|
Some name clashes need to be resolved. Please see the
|
||||||
|
[detailed list of name clashes](libsrc/NameClashes.md).
|
||||||
|
|
||||||
|
## Test suite
|
||||||
|
|
||||||
|
* Specific tests to check the optimizer (rather than the code
|
||||||
|
generator) are needed.
|
||||||
|
* We need more specific tests to check standard conformance
|
||||||
|
of the library headers.
|
||||||
34
Makefile
34
Makefile
@@ -1,17 +1,27 @@
|
|||||||
.PHONY: all mostlyclean clean install zip avail unavail bin lib doc html info samples
|
.PHONY: all mostlyclean clean install zip avail unavail bin lib doc html info samples test util checkstyle check
|
||||||
|
|
||||||
.SUFFIXES:
|
.SUFFIXES:
|
||||||
|
|
||||||
all mostlyclean clean install zip:
|
all install zip:
|
||||||
@$(MAKE) -C src --no-print-directory $@
|
@$(MAKE) -C src --no-print-directory $@
|
||||||
@$(MAKE) -C libsrc --no-print-directory $@
|
@$(MAKE) -C libsrc --no-print-directory $@
|
||||||
@$(MAKE) -C doc --no-print-directory $@
|
@$(MAKE) -C doc --no-print-directory $@
|
||||||
|
@$(MAKE) -C util --no-print-directory $@
|
||||||
@$(MAKE) -C samples --no-print-directory $@
|
@$(MAKE) -C samples --no-print-directory $@
|
||||||
|
|
||||||
|
mostlyclean clean:
|
||||||
|
@$(MAKE) -C src --no-print-directory $@
|
||||||
|
@$(MAKE) -C libsrc --no-print-directory $@
|
||||||
|
@$(MAKE) -C doc --no-print-directory $@
|
||||||
|
@$(MAKE) -C util --no-print-directory $@
|
||||||
|
@$(MAKE) -C samples --no-print-directory $@
|
||||||
|
@$(MAKE) -C test --no-print-directory $@
|
||||||
|
@$(MAKE) -C targettest --no-print-directory $@
|
||||||
|
|
||||||
avail unavail bin:
|
avail unavail bin:
|
||||||
@$(MAKE) -C src --no-print-directory $@
|
@$(MAKE) -C src --no-print-directory $@
|
||||||
|
|
||||||
lib:
|
lib libtest:
|
||||||
@$(MAKE) -C libsrc --no-print-directory $@
|
@$(MAKE) -C libsrc --no-print-directory $@
|
||||||
|
|
||||||
doc html info:
|
doc html info:
|
||||||
@@ -20,8 +30,26 @@ doc html info:
|
|||||||
samples:
|
samples:
|
||||||
@$(MAKE) -C samples --no-print-directory $@
|
@$(MAKE) -C samples --no-print-directory $@
|
||||||
|
|
||||||
|
util:
|
||||||
|
@$(MAKE) -C util --no-print-directory $@
|
||||||
|
|
||||||
%65:
|
%65:
|
||||||
@$(MAKE) -C src --no-print-directory $@
|
@$(MAKE) -C src --no-print-directory $@
|
||||||
|
|
||||||
%:
|
%:
|
||||||
@$(MAKE) -C libsrc --no-print-directory $@
|
@$(MAKE) -C libsrc --no-print-directory $@
|
||||||
|
|
||||||
|
# check the code style
|
||||||
|
checkstyle:
|
||||||
|
@$(MAKE) -C .github/checks --no-print-directory $@
|
||||||
|
|
||||||
|
# runs regression tests, requires libtest target libraries
|
||||||
|
test:
|
||||||
|
@$(MAKE) -C test --no-print-directory $@
|
||||||
|
|
||||||
|
# GNU "check" target, which runs all tests
|
||||||
|
check:
|
||||||
|
@$(MAKE) -C .github/checks checkstyle --no-print-directory
|
||||||
|
@$(MAKE) test
|
||||||
|
@$(MAKE) -C targettest platforms --no-print-directory
|
||||||
|
@$(MAKE) -C samples platforms --no-print-directory
|
||||||
|
|||||||
133
README.md
133
README.md
@@ -1,40 +1,107 @@
|
|||||||
[Windows Snapshot](https://sourceforge.net/projects/cc65/files/cc65-snapshot-win32.zip)
|
The cc65 cross-compiler suite
|
||||||
|
=============================
|
||||||
|
|
||||||
[Documentation](https://cc65.github.io/doc)
|
cc65 is a complete cross-development package for 65(C)02 systems,
|
||||||
|
including a powerful macro assembler, a C compiler, linker, archiver,
|
||||||
|
simulator and several other tools. cc65 has C and runtime library
|
||||||
|
support for many of the old 6502 machines. For details look at
|
||||||
|
the [cc65 web site](https://cc65.github.io):
|
||||||
|
|
||||||
[Wiki](https://github.com/cc65/wiki/wiki)
|
| Company / People | Machine / Environment |
|
||||||
|
|-------------------------|-------------------------------------|
|
||||||
|
| Apple | Apple II |
|
||||||
|
| | Apple IIe enhanced |
|
||||||
|
| Atari | Atari 400/800 |
|
||||||
|
| | Atari 2600 |
|
||||||
|
| | Atari 5200 |
|
||||||
|
| | Atari 7800 |
|
||||||
|
| | Atari XL |
|
||||||
|
| | Lynx |
|
||||||
|
| Tangerine | Oric Atmos |
|
||||||
|
| Eureka | Oric Telestrat |
|
||||||
|
| Acorn | BBC series |
|
||||||
|
| Commodore | C128 |
|
||||||
|
| | C16 |
|
||||||
|
| | C64 |
|
||||||
|
| | CBM 510/610 |
|
||||||
|
| | PET |
|
||||||
|
| | Plus/4 |
|
||||||
|
| | VIC-20 |
|
||||||
|
| VTech | CreatiVision |
|
||||||
|
| Commander X16 Community | Commander X16 |
|
||||||
|
| Bit Corporation | Gamate |
|
||||||
|
| Berkeley Softworks | GEOS (Apple/CBM) |
|
||||||
|
| LUnix Team | LUnix (C64) |
|
||||||
|
| Nintendo | Nintendo Entertainment System (NES) |
|
||||||
|
| Ohio Scientific | OSI C1P |
|
||||||
|
| MOS Technology, Inc. | KIM-1 |
|
||||||
|
| NEC | PC Engine (PCE) |
|
||||||
|
| Dr. Jozo Dujmović | Picocomputer (RP6502) |
|
||||||
|
| Watara | Watura/QuickShot Supervision |
|
||||||
|
| Synertek | SYM-1 |
|
||||||
|
|
||||||
[](https://travis-ci.org/cc65/cc65/builds)
|
A generic configuration to adapt cc65 to new targets is also around.
|
||||||
|
|
||||||
cc65 is a complete cross development package for 65(C)02 systems, including
|
## People
|
||||||
a powerful macro assembler, a C compiler, linker, librarian and several
|
|
||||||
other tools.
|
|
||||||
|
|
||||||
cc65 has C and runtime library support for many of the old 6502 machines,
|
cc65 is originally based on the "Small C" compiler by Ron Cain and
|
||||||
including
|
enhanced by James E. Hendrix.
|
||||||
|
|
||||||
- the following Commodore machines:
|
### Project founders
|
||||||
- VIC20
|
|
||||||
- C16/C116 and Plus/4
|
|
||||||
- C64
|
|
||||||
- C128
|
|
||||||
- CBM 510 (aka P500)
|
|
||||||
- the 600/700 family
|
|
||||||
- newer PET machines (not 2001).
|
|
||||||
- the Apple ]\[+ and successors.
|
|
||||||
- the Atari 8 bit machines.
|
|
||||||
- the Atari 2600 console.
|
|
||||||
- the Atari 5200 console.
|
|
||||||
- GEOS for the C64, C128 and Apple //e.
|
|
||||||
- the Bit Corporation Gamate console.
|
|
||||||
- the NEC PC-Engine (aka TurboGrafx-16) console.
|
|
||||||
- the Nintendo Entertainment System (NES) console.
|
|
||||||
- the Watara Supervision console.
|
|
||||||
- the VTech Creativision console.
|
|
||||||
- the Oric Atmos.
|
|
||||||
- the Oric Telestrat.
|
|
||||||
- the Lynx console.
|
|
||||||
- the Ohio Scientific Challenger 1P.
|
|
||||||
|
|
||||||
The libraries are fairly portable, so creating a version for other 6502s
|
* John R. Dunning: [original implementation](https://public.websites.umich.edu/~archive/atari/8bit/Languages/Cc65/)
|
||||||
shouldn't be too much work.
|
of the C compiler and runtime library, Atari hosted.
|
||||||
|
* Ullrich von Bassewitz:
|
||||||
|
* moved Dunning's code to modern systems,
|
||||||
|
* rewrote most parts of the compiler,
|
||||||
|
* rewrote all of the runtime library.
|
||||||
|
|
||||||
|
### Core team members
|
||||||
|
|
||||||
|
* [Christian Groessler](https://github.com/groessler): Atari, Atari5200, and CreatiVision library Maintainer
|
||||||
|
* [dqh](https://github.com/dqh-au): GHA help
|
||||||
|
* [Greg King](https://github.com/greg-king5): all around hackery
|
||||||
|
* [groepaz](https://github.com/mrdudz): CBM library, Project Maintainer
|
||||||
|
* [Oliver Schmidt](https://github.com/oliverschmidt): Apple II library Maintainer
|
||||||
|
|
||||||
|
### External contributors
|
||||||
|
|
||||||
|
* [acqn](https://github.com/acqn): various compiler fixes
|
||||||
|
* [jedeoric](https://github.com/jedeoric): Telestrat target
|
||||||
|
* [jmr](https://github.com/jmr): compiler fixes
|
||||||
|
* [karrika](https://github.com/karrika): Atari 7800 target
|
||||||
|
* [Stephan Mühlstrasser](https://github.com/smuehlst): osic1p target
|
||||||
|
* [Wayne Parham](https://github.com/WayneParham): Sym-1 target
|
||||||
|
* [Dave Plummer](https://github.com/davepl): KIM-1 target
|
||||||
|
* [rumbledethumps](https://github.com/rumbledethumps): Picocomputer target
|
||||||
|
|
||||||
|
*(The above list is incomplete, if you feel left out - please speak up or add yourself in a PR)*
|
||||||
|
|
||||||
|
For a complete list look at the [full team list](https://github.com/orgs/cc65/teams)
|
||||||
|
or the list of [all contributors](https://github.com/cc65/cc65/graphs/contributors).
|
||||||
|
|
||||||
|
# Contact
|
||||||
|
|
||||||
|
For general discussion, questions, etc subscribe to the
|
||||||
|
[mailing list](https://cc65.github.io/mailing-lists.html)
|
||||||
|
or use the [github discussions](https://github.com/cc65/cc65/discussions).
|
||||||
|
|
||||||
|
Some of us may also be around on IRC [#cc65](https://web.libera.chat/#cc65) on libera.chat.
|
||||||
|
|
||||||
|
# Documentation
|
||||||
|
|
||||||
|
* The main [Documentation](https://cc65.github.io/doc) for users and
|
||||||
|
developers.
|
||||||
|
* Info on [Contributing](Contributing.md) to the CC65 project. Please
|
||||||
|
read this before working on something you want to contribute, and
|
||||||
|
before reporting bugs.
|
||||||
|
* The [Wiki](https://github.com/cc65/wiki/wiki) contains some extra info
|
||||||
|
that does not fit into the regular documentation.
|
||||||
|
|
||||||
|
# Downloads
|
||||||
|
|
||||||
|
* [Windows 64bit Snapshot](https://sourceforge.net/projects/cc65/files/cc65-snapshot-win64.zip)
|
||||||
|
* [Windows 32bit Snapshot](https://sourceforge.net/projects/cc65/files/cc65-snapshot-win32.zip)
|
||||||
|
* [Linux Snapshot DEB and RPM](https://software.opensuse.org/download.html?project=home%3Astrik&package=cc65)
|
||||||
|
|
||||||
|
[](https://github.com/cc65/cc65/actions/workflows/snapshot-on-push-master.yml)
|
||||||
|
|||||||
@@ -28,8 +28,8 @@ HEAP_MIN_BLOCKSIZE = .sizeof (freeblock) ; Minimum size of an allocated block
|
|||||||
HEAP_ADMIN_SPACE = .sizeof (usedblock) ; Additional space for used bock
|
HEAP_ADMIN_SPACE = .sizeof (usedblock) ; Additional space for used bock
|
||||||
|
|
||||||
; Variables
|
; Variables
|
||||||
.global __heaporg
|
.global ___heaporg
|
||||||
.global __heapptr
|
.global ___heapptr
|
||||||
.global __heapend
|
.global ___heapend
|
||||||
.global __heapfirst
|
.global ___heapfirst
|
||||||
.global __heaplast
|
.global ___heaplast
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
; Zero page stuff
|
; Zero page
|
||||||
|
|
||||||
WNDLFT := $20 ; Text window left
|
WNDLFT := $20 ; Text window left
|
||||||
WNDWDTH := $21 ; Text window width
|
WNDWDTH := $21 ; Text window width
|
||||||
@@ -15,6 +15,7 @@ PROMPT := $33 ; Used by GETLN
|
|||||||
RNDL := $4E ; Random counter low
|
RNDL := $4E ; Random counter low
|
||||||
RNDH := $4F ; Random counter high
|
RNDH := $4F ; Random counter high
|
||||||
HIMEM := $73 ; Highest available memory address+1
|
HIMEM := $73 ; Highest available memory address+1
|
||||||
|
CURLIN := $75 ; Current line number being executed
|
||||||
|
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
; Vectors
|
; Vectors
|
||||||
@@ -24,6 +25,12 @@ BRKVec := $03F0 ; Break vector
|
|||||||
SOFTEV := $03F2 ; Vector for warm start
|
SOFTEV := $03F2 ; Vector for warm start
|
||||||
PWREDUP := $03F4 ; This must be = EOR #$A5 of SOFTEV+1
|
PWREDUP := $03F4 ; This must be = EOR #$A5 of SOFTEV+1
|
||||||
|
|
||||||
|
;-----------------------------------------------------------------------------
|
||||||
|
; 80 column firmware
|
||||||
|
|
||||||
|
OURCH := $057B ; Cursor horizontal position
|
||||||
|
OURCV := $05FB ; Cursor vertical position
|
||||||
|
|
||||||
;-----------------------------------------------------------------------------
|
;-----------------------------------------------------------------------------
|
||||||
; Hardware
|
; Hardware
|
||||||
|
|
||||||
@@ -31,34 +38,56 @@ PWREDUP := $03F4 ; This must be = EOR #$A5 of SOFTEV+1
|
|||||||
KBD := $C000 ; Read keyboard
|
KBD := $C000 ; Read keyboard
|
||||||
KBDSTRB := $C010 ; Clear keyboard strobe
|
KBDSTRB := $C010 ; Clear keyboard strobe
|
||||||
|
|
||||||
; 80 column video switches
|
; 80 column video
|
||||||
CLR80COL:= $C000 ; Disable 80 column store
|
CLR80COL:= $C000 ; Disable 80 column store
|
||||||
SET80COL:= $C001 ; Enable 80 column store
|
SET80COL:= $C001 ; Enable 80 column store
|
||||||
RD80COL := $C018 ; >127 if 80 column store enabled
|
RD80COL := $C018 ; >127 if 80 column store enabled
|
||||||
RD80VID := $C01F ; >127 if 80 column video enabled
|
RD80VID := $C01F ; >127 if 80 column video enabled
|
||||||
|
|
||||||
; Character set switches
|
; Character set
|
||||||
CLRALTCHAR := $C00E ; Normal Apple II char set
|
CLRALTCHAR := $C00E ; Normal Apple II char set
|
||||||
SETALTCHAR := $C00F ; Norm/inv LC, no flash
|
SETALTCHAR := $C00F ; Norm/inv LC, no flash
|
||||||
ALTCHARSET := $C01E ; >127 if alt charset switched in
|
ALTCHARSET := $C01E ; >127 if alt charset switched in
|
||||||
|
|
||||||
; Language card switches
|
; Language card
|
||||||
RDLCBNK2:= $C011 ; >127 if LC bank 2 in use
|
RDLCBNK2:= $C011 ; >127 if LC bank 2 in use
|
||||||
RDLCRAM := $C012 ; >127 if LC is read enabled
|
RDLCRAM := $C012 ; >127 if LC is read enabled
|
||||||
ROMIN := $C081 ; Swap in D000-FFFF ROM
|
ROMIN := $C081 ; Swap in D000-FFFF ROM
|
||||||
LCBANK2 := $C083 ; Swap in LC bank 2
|
LCBANK2 := $C083 ; Swap in LC bank 2
|
||||||
LCBANK1 := $C08B ; Swap in LC bank 1
|
LCBANK1 := $C08B ; Swap in LC bank 1
|
||||||
|
|
||||||
; Video mode switches
|
; Vertical blanking
|
||||||
TXTCLR := $C050 ; Display graphics
|
RDVBLBAR := $C019 ; >127 if not vertical blanking
|
||||||
TXTSET := $C051 ; Display text
|
RDVBLMSK := $C041 ; >127 if VBL interrupts enabled
|
||||||
MIXCLR := $C052 ; Disable 4 lines of text
|
DISVBL := $C05A ; Disable VBL interrupts
|
||||||
MIXSET := $C053 ; Enable 4 lines of text
|
ENVBL := $C05B ; Enable VBL interrupts
|
||||||
LOWSCR := $C054 ; Page 1
|
|
||||||
HISCR := $C055 ; Page 2
|
; Video mode
|
||||||
LORES := $C056 ; Lores graphics
|
TXTCLR := $C050 ; Display graphics
|
||||||
HIRES := $C057 ; Hires graphics
|
TXTSET := $C051 ; Display text
|
||||||
|
MIXCLR := $C052 ; Disable 4 lines of text
|
||||||
|
MIXSET := $C053 ; Enable 4 lines of text
|
||||||
|
LOWSCR := $C054 ; Page 1
|
||||||
|
HISCR := $C055 ; Page 2
|
||||||
|
LORES := $C056 ; Lores graphics
|
||||||
|
HIRES := $C057 ; Hires graphics
|
||||||
|
DHIRESON := $C05E ; Enable double-width graphics
|
||||||
|
DHIRESOFF := $C05F ; Disable double-width graphics
|
||||||
|
|
||||||
; Game controller
|
; Game controller
|
||||||
BUTN0 := $C061 ; Open-Apple Key
|
TAPEIN := $C060 ; Read casette input / Switch input 3
|
||||||
BUTN1 := $C062 ; Closed-Apple Key
|
BUTN0 := $C061 ; Switch input 0 / Open-Apple key
|
||||||
|
BUTN1 := $C062 ; Switch input 1 / Closed-Apple key
|
||||||
|
BUTN2 := $C063 ; Switch input 2 / Shift key
|
||||||
|
PADDL0 := $C064 ; Analog input 0
|
||||||
|
PADDL1 := $C065 ; Analog input 1
|
||||||
|
PADDL2 := $C066 ; Analog input 2
|
||||||
|
PADDL3 := $C067 ; Analog input 3
|
||||||
|
PTRIG := $C070 ; Analog input reset
|
||||||
|
|
||||||
|
; Input/Output Unit
|
||||||
|
IOUDISON := $C07E ; Disable IOU
|
||||||
|
IOUDISOFF := $C07F ; Enable IOU
|
||||||
|
|
||||||
|
; Control Your Apple
|
||||||
|
CYAREG := $C036 ; Bits 0-3=disk detect 4=shadow all banks 7=fast
|
||||||
|
|||||||
287
asminc/ascii_charmap.inc
Normal file
287
asminc/ascii_charmap.inc
Normal file
@@ -0,0 +1,287 @@
|
|||||||
|
;/*****************************************************************************/
|
||||||
|
;/* */
|
||||||
|
;/* ascii_charmap.inc */
|
||||||
|
;/* */
|
||||||
|
;/* No translations, encodings are stored as they were typed in the host. */
|
||||||
|
;/* */
|
||||||
|
;/* */
|
||||||
|
;/* 2019-09-07, Greg King */
|
||||||
|
;/* */
|
||||||
|
;/* This software is provided "as-is", without any expressed or implied */
|
||||||
|
;/* warranty. In no event will the authors be held liable for any damages */
|
||||||
|
;/* arising from the use of this software. */
|
||||||
|
;/* */
|
||||||
|
;/* Permission is granted to anyone to use this software for any purpose, */
|
||||||
|
;/* including commercial applications, and to alter it and redistribute it */
|
||||||
|
;/* freely, subject to the following restrictions: */
|
||||||
|
;/* */
|
||||||
|
;/* 1. The origin of this software must not be misrepresented; you must not */
|
||||||
|
;/* claim that you wrote the original software. If you use this software */
|
||||||
|
;/* in a product, an acknowledgment in the product documentation would be */
|
||||||
|
;/* appreciated, but is not required. */
|
||||||
|
;/* 2. Altered source versions must be plainly marked as such, and must not */
|
||||||
|
;/* be misrepresented as being the original software. */
|
||||||
|
;/* 3. This notice must not be removed or altered from any source */
|
||||||
|
;/* distribution. */
|
||||||
|
;/* */
|
||||||
|
;/*****************************************************************************/
|
||||||
|
|
||||||
|
;/* ASCII */
|
||||||
|
.charmap $00, $00
|
||||||
|
.charmap $01, $01
|
||||||
|
.charmap $02, $02
|
||||||
|
.charmap $03, $03
|
||||||
|
.charmap $04, $04
|
||||||
|
.charmap $05, $05
|
||||||
|
.charmap $06, $06
|
||||||
|
.charmap $07, $07
|
||||||
|
.charmap $08, $08
|
||||||
|
.charmap $09, $09
|
||||||
|
.charmap $0A, $0A
|
||||||
|
.charmap $0B, $0B
|
||||||
|
.charmap $0C, $0C
|
||||||
|
.charmap $0D, $0D
|
||||||
|
.charmap $0E, $0E
|
||||||
|
.charmap $0F, $0F
|
||||||
|
.charmap $10, $10
|
||||||
|
.charmap $11, $11
|
||||||
|
.charmap $12, $12
|
||||||
|
.charmap $13, $13
|
||||||
|
.charmap $14, $14
|
||||||
|
.charmap $15, $15
|
||||||
|
.charmap $16, $16
|
||||||
|
.charmap $17, $17
|
||||||
|
.charmap $18, $18
|
||||||
|
.charmap $19, $19
|
||||||
|
.charmap $1A, $1A
|
||||||
|
.charmap $1B, $1B
|
||||||
|
.charmap $1C, $1C
|
||||||
|
.charmap $1D, $1D
|
||||||
|
.charmap $1E, $1E
|
||||||
|
.charmap $1F, $1F
|
||||||
|
.charmap $20, $20
|
||||||
|
.charmap $21, $21
|
||||||
|
.charmap $22, $22
|
||||||
|
.charmap $23, $23
|
||||||
|
.charmap $24, $24
|
||||||
|
.charmap $25, $25
|
||||||
|
.charmap $26, $26
|
||||||
|
.charmap $27, $27
|
||||||
|
.charmap $28, $28
|
||||||
|
.charmap $29, $29
|
||||||
|
.charmap $2A, $2A
|
||||||
|
.charmap $2B, $2B
|
||||||
|
.charmap $2C, $2C
|
||||||
|
.charmap $2D, $2D
|
||||||
|
.charmap $2E, $2E
|
||||||
|
.charmap $2F, $2F
|
||||||
|
.charmap $30, $30
|
||||||
|
.charmap $31, $31
|
||||||
|
.charmap $32, $32
|
||||||
|
.charmap $33, $33
|
||||||
|
.charmap $34, $34
|
||||||
|
.charmap $35, $35
|
||||||
|
.charmap $36, $36
|
||||||
|
.charmap $37, $37
|
||||||
|
.charmap $38, $38
|
||||||
|
.charmap $39, $39
|
||||||
|
.charmap $3A, $3A
|
||||||
|
.charmap $3B, $3B
|
||||||
|
.charmap $3C, $3C
|
||||||
|
.charmap $3D, $3D
|
||||||
|
.charmap $3E, $3E
|
||||||
|
.charmap $3F, $3F
|
||||||
|
.charmap $40, $40
|
||||||
|
.charmap $41, $41
|
||||||
|
.charmap $42, $42
|
||||||
|
.charmap $43, $43
|
||||||
|
.charmap $44, $44
|
||||||
|
.charmap $45, $45
|
||||||
|
.charmap $46, $46
|
||||||
|
.charmap $47, $47
|
||||||
|
.charmap $48, $48
|
||||||
|
.charmap $49, $49
|
||||||
|
.charmap $4A, $4A
|
||||||
|
.charmap $4B, $4B
|
||||||
|
.charmap $4C, $4C
|
||||||
|
.charmap $4D, $4D
|
||||||
|
.charmap $4E, $4E
|
||||||
|
.charmap $4F, $4F
|
||||||
|
.charmap $50, $50
|
||||||
|
.charmap $51, $51
|
||||||
|
.charmap $52, $52
|
||||||
|
.charmap $53, $53
|
||||||
|
.charmap $54, $54
|
||||||
|
.charmap $55, $55
|
||||||
|
.charmap $56, $56
|
||||||
|
.charmap $57, $57
|
||||||
|
.charmap $58, $58
|
||||||
|
.charmap $59, $59
|
||||||
|
.charmap $5A, $5A
|
||||||
|
.charmap $5B, $5B
|
||||||
|
.charmap $5C, $5C
|
||||||
|
.charmap $5D, $5D
|
||||||
|
.charmap $5E, $5E
|
||||||
|
.charmap $5F, $5F
|
||||||
|
.charmap $60, $60
|
||||||
|
.charmap $61, $61
|
||||||
|
.charmap $62, $62
|
||||||
|
.charmap $63, $63
|
||||||
|
.charmap $64, $64
|
||||||
|
.charmap $65, $65
|
||||||
|
.charmap $66, $66
|
||||||
|
.charmap $67, $67
|
||||||
|
.charmap $68, $68
|
||||||
|
.charmap $69, $69
|
||||||
|
.charmap $6A, $6A
|
||||||
|
.charmap $6B, $6B
|
||||||
|
.charmap $6C, $6C
|
||||||
|
.charmap $6D, $6D
|
||||||
|
.charmap $6E, $6E
|
||||||
|
.charmap $6F, $6F
|
||||||
|
.charmap $70, $70
|
||||||
|
.charmap $71, $71
|
||||||
|
.charmap $72, $72
|
||||||
|
.charmap $73, $73
|
||||||
|
.charmap $74, $74
|
||||||
|
.charmap $75, $75
|
||||||
|
.charmap $76, $76
|
||||||
|
.charmap $77, $77
|
||||||
|
.charmap $78, $78
|
||||||
|
.charmap $79, $79
|
||||||
|
.charmap $7A, $7A
|
||||||
|
.charmap $7B, $7B
|
||||||
|
.charmap $7C, $7C
|
||||||
|
.charmap $7D, $7D
|
||||||
|
.charmap $7E, $7E
|
||||||
|
.charmap $7F, $7F
|
||||||
|
|
||||||
|
;/* beyond ASCII */
|
||||||
|
.charmap $80, $80
|
||||||
|
.charmap $81, $81
|
||||||
|
.charmap $82, $82
|
||||||
|
.charmap $83, $83
|
||||||
|
.charmap $84, $84
|
||||||
|
.charmap $85, $85
|
||||||
|
.charmap $86, $86
|
||||||
|
.charmap $87, $87
|
||||||
|
.charmap $88, $88
|
||||||
|
.charmap $89, $89
|
||||||
|
.charmap $8A, $8A
|
||||||
|
.charmap $8B, $8B
|
||||||
|
.charmap $8C, $8C
|
||||||
|
.charmap $8D, $8D
|
||||||
|
.charmap $8E, $8E
|
||||||
|
.charmap $8F, $8F
|
||||||
|
.charmap $90, $90
|
||||||
|
.charmap $91, $91
|
||||||
|
.charmap $92, $92
|
||||||
|
.charmap $93, $93
|
||||||
|
.charmap $94, $94
|
||||||
|
.charmap $95, $95
|
||||||
|
.charmap $96, $96
|
||||||
|
.charmap $97, $97
|
||||||
|
.charmap $98, $98
|
||||||
|
.charmap $99, $99
|
||||||
|
.charmap $9A, $9A
|
||||||
|
.charmap $9B, $9B
|
||||||
|
.charmap $9C, $9C
|
||||||
|
.charmap $9D, $9D
|
||||||
|
.charmap $9E, $9E
|
||||||
|
.charmap $9F, $9F
|
||||||
|
.charmap $A0, $A0
|
||||||
|
.charmap $A1, $A1
|
||||||
|
.charmap $A2, $A2
|
||||||
|
.charmap $A3, $A3
|
||||||
|
.charmap $A4, $A4
|
||||||
|
.charmap $A5, $A5
|
||||||
|
.charmap $A6, $A6
|
||||||
|
.charmap $A7, $A7
|
||||||
|
.charmap $A8, $A8
|
||||||
|
.charmap $A9, $A9
|
||||||
|
.charmap $AA, $AA
|
||||||
|
.charmap $AB, $AB
|
||||||
|
.charmap $AC, $AC
|
||||||
|
.charmap $AD, $AD
|
||||||
|
.charmap $AE, $AE
|
||||||
|
.charmap $AF, $AF
|
||||||
|
.charmap $B0, $B0
|
||||||
|
.charmap $B1, $B1
|
||||||
|
.charmap $B2, $B2
|
||||||
|
.charmap $B3, $B3
|
||||||
|
.charmap $B4, $B4
|
||||||
|
.charmap $B5, $B5
|
||||||
|
.charmap $B6, $B6
|
||||||
|
.charmap $B7, $B7
|
||||||
|
.charmap $B8, $B8
|
||||||
|
.charmap $B9, $B9
|
||||||
|
.charmap $BA, $BA
|
||||||
|
.charmap $BB, $BB
|
||||||
|
.charmap $BC, $BC
|
||||||
|
.charmap $BD, $BD
|
||||||
|
.charmap $BE, $BE
|
||||||
|
.charmap $BF, $BF
|
||||||
|
.charmap $C0, $C0
|
||||||
|
.charmap $C1, $C1
|
||||||
|
.charmap $C2, $C2
|
||||||
|
.charmap $C3, $C3
|
||||||
|
.charmap $C4, $C4
|
||||||
|
.charmap $C5, $C5
|
||||||
|
.charmap $C6, $C6
|
||||||
|
.charmap $C7, $C7
|
||||||
|
.charmap $C8, $C8
|
||||||
|
.charmap $C9, $C9
|
||||||
|
.charmap $CA, $CA
|
||||||
|
.charmap $CB, $CB
|
||||||
|
.charmap $CC, $CC
|
||||||
|
.charmap $CD, $CD
|
||||||
|
.charmap $CE, $CE
|
||||||
|
.charmap $CF, $CF
|
||||||
|
.charmap $D0, $D0
|
||||||
|
.charmap $D1, $D1
|
||||||
|
.charmap $D2, $D2
|
||||||
|
.charmap $D3, $D3
|
||||||
|
.charmap $D4, $D4
|
||||||
|
.charmap $D5, $D5
|
||||||
|
.charmap $D6, $D6
|
||||||
|
.charmap $D7, $D7
|
||||||
|
.charmap $D8, $D8
|
||||||
|
.charmap $D9, $D9
|
||||||
|
.charmap $DA, $DA
|
||||||
|
.charmap $DB, $DB
|
||||||
|
.charmap $DC, $DC
|
||||||
|
.charmap $DD, $DD
|
||||||
|
.charmap $DE, $DE
|
||||||
|
.charmap $DF, $DF
|
||||||
|
.charmap $E0, $E0
|
||||||
|
.charmap $E1, $E1
|
||||||
|
.charmap $E2, $E2
|
||||||
|
.charmap $E3, $E3
|
||||||
|
.charmap $E4, $E4
|
||||||
|
.charmap $E5, $E5
|
||||||
|
.charmap $E6, $E6
|
||||||
|
.charmap $E7, $E7
|
||||||
|
.charmap $E8, $E8
|
||||||
|
.charmap $E9, $E9
|
||||||
|
.charmap $EA, $EA
|
||||||
|
.charmap $EB, $EB
|
||||||
|
.charmap $EC, $EC
|
||||||
|
.charmap $ED, $ED
|
||||||
|
.charmap $EE, $EE
|
||||||
|
.charmap $EF, $EF
|
||||||
|
.charmap $F0, $F0
|
||||||
|
.charmap $F1, $F1
|
||||||
|
.charmap $F2, $F2
|
||||||
|
.charmap $F3, $F3
|
||||||
|
.charmap $F4, $F4
|
||||||
|
.charmap $F5, $F5
|
||||||
|
.charmap $F6, $F6
|
||||||
|
.charmap $F7, $F7
|
||||||
|
.charmap $F8, $F8
|
||||||
|
.charmap $F9, $F9
|
||||||
|
.charmap $FA, $FA
|
||||||
|
.charmap $FB, $FB
|
||||||
|
.charmap $FC, $FC
|
||||||
|
.charmap $FD, $FD
|
||||||
|
.charmap $FE, $FE
|
||||||
|
.charmap $FF, $FF
|
||||||
@@ -924,7 +924,7 @@ KEY_QUESTIONMARK = KEY_SLASH | KEY_SHIFT
|
|||||||
KEY_CLEAR = KEY_LESSTHAN | KEY_SHIFT
|
KEY_CLEAR = KEY_LESSTHAN | KEY_SHIFT
|
||||||
KEY_INSERT = KEY_GREATERTHAN | KEY_SHIFT
|
KEY_INSERT = KEY_GREATERTHAN | KEY_SHIFT
|
||||||
|
|
||||||
KEY_UP = KEY_UNDERLINE | KEY_CTRL
|
KEY_UP = KEY_DASH | KEY_CTRL
|
||||||
KEY_DOWN = KEY_EQUALS | KEY_CTRL
|
KEY_DOWN = KEY_EQUALS | KEY_CTRL
|
||||||
KEY_LEFT = KEY_PLUS | KEY_CTRL
|
KEY_LEFT = KEY_PLUS | KEY_CTRL
|
||||||
KEY_RIGHT = KEY_ASTERISK | KEY_CTRL
|
KEY_RIGHT = KEY_ASTERISK | KEY_CTRL
|
||||||
|
|||||||
14
asminc/atari7800.inc
Normal file
14
asminc/atari7800.inc
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
; Atari 7800 TIA & RIOT read / write registers
|
||||||
|
;
|
||||||
|
; Karri Kaksonen (karri@sipo.fi), 2022
|
||||||
|
|
||||||
|
; TIA, RIOT & MARIA registers mapping
|
||||||
|
.include "atari7800_tia.inc"
|
||||||
|
.include "atari7800_riot.inc"
|
||||||
|
.include "atari7800_maria.inc"
|
||||||
|
|
||||||
|
; constants for the conio implementation
|
||||||
|
mono_charsperline = 40
|
||||||
|
charsperline = 20
|
||||||
|
screenrows = 28
|
||||||
|
|
||||||
39
asminc/atari7800_maria.inc
Normal file
39
asminc/atari7800_maria.inc
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
; Atari 7800 MARIA read / write registers
|
||||||
|
;
|
||||||
|
|
||||||
|
; Read registers
|
||||||
|
BKGRND := $20
|
||||||
|
P0C1 := $21
|
||||||
|
P0C2 := $22
|
||||||
|
P0C3 := $23
|
||||||
|
MWSYNC := $24
|
||||||
|
P1C1 := $25
|
||||||
|
P1C2 := $26
|
||||||
|
P1C3 := $27
|
||||||
|
MSTAT := $28
|
||||||
|
P2C1 := $29
|
||||||
|
P2C2 := $2A
|
||||||
|
P2C3 := $2B
|
||||||
|
DPPH := $2C
|
||||||
|
P3C1 := $2D
|
||||||
|
P3C2 := $2E
|
||||||
|
P3C3 := $2F
|
||||||
|
DPPL := $30
|
||||||
|
P4C1 := $31
|
||||||
|
P4C2 := $32
|
||||||
|
P4C3 := $33
|
||||||
|
CHBASE := $34
|
||||||
|
P5C1 := $35
|
||||||
|
P5C2 := $36
|
||||||
|
P5C3 := $37
|
||||||
|
OFFSET := $38
|
||||||
|
P6C1 := $39
|
||||||
|
P6C2 := $3A
|
||||||
|
P6C3 := $3B
|
||||||
|
CTRL := $3C
|
||||||
|
P7C1 := $3D
|
||||||
|
P7C2 := $3E
|
||||||
|
P7C3 := $3F
|
||||||
|
|
||||||
|
; Write registers
|
||||||
|
|
||||||
20
asminc/atari7800_riot.inc
Normal file
20
asminc/atari7800_riot.inc
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
; Atari 7800 RIOT read / write registers
|
||||||
|
;
|
||||||
|
; Source: DASM - vcs.h
|
||||||
|
; Details available in: Stella Programmer's Guide by Steve Wright
|
||||||
|
;
|
||||||
|
; Florent Flament (contact@florentflament.com), 2017
|
||||||
|
|
||||||
|
; Read registers
|
||||||
|
SWCHA := $0280
|
||||||
|
CTLSWA := $0281
|
||||||
|
SWCHB := $0282
|
||||||
|
CTLSWB := $0283
|
||||||
|
INTIM := $0284
|
||||||
|
TIMINT := $0285
|
||||||
|
|
||||||
|
; Write registers
|
||||||
|
TIM1T := $0294
|
||||||
|
TIM8T := $0295
|
||||||
|
TIM64T := $0296
|
||||||
|
T1024T := $0297
|
||||||
69
asminc/atari7800_tia.inc
Normal file
69
asminc/atari7800_tia.inc
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
; Atari 7800 TIA read / write registers
|
||||||
|
;
|
||||||
|
; Source: DASM - vcs.h
|
||||||
|
; Details available in: Stella Programmer's Guide by Steve Wright
|
||||||
|
;
|
||||||
|
; Florent Flament (contact@florentflament.com), 2017
|
||||||
|
|
||||||
|
; Read registers
|
||||||
|
VSYNC := $00
|
||||||
|
VBLANK := $01
|
||||||
|
WSYNC := $02
|
||||||
|
RSYNC := $03
|
||||||
|
NUSIZ0 := $04
|
||||||
|
NUSIZ1 := $05
|
||||||
|
COLUP0 := $06
|
||||||
|
COLUP1 := $07
|
||||||
|
COLUPF := $08
|
||||||
|
COLUBK := $09
|
||||||
|
CTRLPF := $0A
|
||||||
|
REFP0 := $0B
|
||||||
|
REFP1 := $0C
|
||||||
|
PF0 := $0D
|
||||||
|
PF1 := $0E
|
||||||
|
PF2 := $0F
|
||||||
|
RESP0 := $10
|
||||||
|
RESP1 := $11
|
||||||
|
RESM0 := $12
|
||||||
|
RESM1 := $13
|
||||||
|
RESBL := $14
|
||||||
|
AUDC0 := $15
|
||||||
|
AUDC1 := $16
|
||||||
|
AUDF0 := $17
|
||||||
|
AUDF1 := $18
|
||||||
|
AUDV0 := $19
|
||||||
|
AUDV1 := $1A
|
||||||
|
GRP0 := $1B
|
||||||
|
GRP1 := $1C
|
||||||
|
ENAM0 := $1D
|
||||||
|
ENAM1 := $1E
|
||||||
|
ENABL := $1F
|
||||||
|
HMP0 := $20
|
||||||
|
HMP1 := $21
|
||||||
|
HMM0 := $22
|
||||||
|
HMM1 := $23
|
||||||
|
HMBL := $24
|
||||||
|
VDELP0 := $25
|
||||||
|
VDELP1 := $26
|
||||||
|
VDELBL := $27
|
||||||
|
RESMP0 := $28
|
||||||
|
RESMP1 := $29
|
||||||
|
HMOVE := $2A
|
||||||
|
HMCLR := $2B
|
||||||
|
CXCLR := $2C
|
||||||
|
|
||||||
|
; Write registers
|
||||||
|
CXM0P := $00
|
||||||
|
CXM1P := $01
|
||||||
|
CXP0FB := $02
|
||||||
|
CXP1FB := $03
|
||||||
|
CXM0FB := $04
|
||||||
|
CXM1FB := $05
|
||||||
|
CXBLPF := $06
|
||||||
|
CXPPMM := $07
|
||||||
|
INPT0 := $08
|
||||||
|
INPT1 := $09
|
||||||
|
INPT2 := $0A
|
||||||
|
INPT3 := $0B
|
||||||
|
INPT4 := $0C
|
||||||
|
INPT5 := $0D
|
||||||
301
asminc/atari_atascii_charmap.inc
Normal file
301
asminc/atari_atascii_charmap.inc
Normal file
@@ -0,0 +1,301 @@
|
|||||||
|
;/*****************************************************************************/
|
||||||
|
;/* */
|
||||||
|
;/* atari_atascii_charmap.inc */
|
||||||
|
;/* */
|
||||||
|
;/* Atari system standard string mapping ISO-8859-1 -> AtASCII */
|
||||||
|
;/* */
|
||||||
|
;/* */
|
||||||
|
;/* */
|
||||||
|
;/* C 2016 Christian Krueger */
|
||||||
|
;/* */
|
||||||
|
;/* */
|
||||||
|
;/* This software is provided 'as-is', without any expressed or implied */
|
||||||
|
;/* warranty. In no event will the authors be held liable for any damages */
|
||||||
|
;/* arising from the use of this software. */
|
||||||
|
;/* */
|
||||||
|
;/* Permission is granted to anyone to use this software for any purpose, */
|
||||||
|
;/* including commercial applications, and to alter it and redistribute it */
|
||||||
|
;/* freely, subject to the following restrictions: */
|
||||||
|
;/* */
|
||||||
|
;/* 1. The origin of this software must not be misrepresented; you must not */
|
||||||
|
;/* claim that you wrote the original software. If you use this software */
|
||||||
|
;/* in a product, an acknowledgment in the product documentation would be */
|
||||||
|
;/* appreciated but is not required. */
|
||||||
|
;/* 2. Altered source versions must be plainly marked as such, and must not */
|
||||||
|
;/* be misrepresented as being the original software. */
|
||||||
|
;/* 3. This notice may not be removed or altered from any source */
|
||||||
|
;/* distribution. */
|
||||||
|
;/* */
|
||||||
|
;/*****************************************************************************/
|
||||||
|
|
||||||
|
.charmap $00, $00
|
||||||
|
.charmap $01, $01
|
||||||
|
.charmap $02, $02
|
||||||
|
.charmap $03, $03
|
||||||
|
.charmap $04, $04
|
||||||
|
.charmap $05, $05
|
||||||
|
.charmap $06, $06
|
||||||
|
.charmap $07, $FD
|
||||||
|
.charmap $08, $08
|
||||||
|
.charmap $09, $7F
|
||||||
|
.charmap $0A, $9B
|
||||||
|
.charmap $0B, $0B
|
||||||
|
.charmap $0C, $7D
|
||||||
|
.charmap $0D, $0D
|
||||||
|
.charmap $0E, $0E
|
||||||
|
.charmap $0F, $0F
|
||||||
|
|
||||||
|
.charmap $10, $10
|
||||||
|
.charmap $11, $11
|
||||||
|
.charmap $12, $12
|
||||||
|
.charmap $13, $13
|
||||||
|
.charmap $14, $14
|
||||||
|
.charmap $15, $15
|
||||||
|
.charmap $16, $16
|
||||||
|
.charmap $17, $17
|
||||||
|
.charmap $18, $18
|
||||||
|
.charmap $19, $19
|
||||||
|
.charmap $1A, $1A
|
||||||
|
.charmap $1B, $1B
|
||||||
|
.charmap $1C, $1C
|
||||||
|
.charmap $1D, $1D
|
||||||
|
.charmap $1E, $1E
|
||||||
|
.charmap $1F, $1F
|
||||||
|
|
||||||
|
.charmap $20, $20
|
||||||
|
.charmap $21, $21
|
||||||
|
.charmap $22, $22
|
||||||
|
.charmap $23, $23
|
||||||
|
.charmap $24, $24
|
||||||
|
.charmap $25, $25
|
||||||
|
.charmap $26, $26
|
||||||
|
.charmap $27, $27
|
||||||
|
.charmap $28, $28
|
||||||
|
.charmap $29, $29
|
||||||
|
.charmap $2A, $2A
|
||||||
|
.charmap $2B, $2B
|
||||||
|
.charmap $2C, $2C
|
||||||
|
.charmap $2D, $2D
|
||||||
|
.charmap $2E, $2E
|
||||||
|
.charmap $2F, $2F
|
||||||
|
|
||||||
|
.charmap $30, $30
|
||||||
|
.charmap $31, $31
|
||||||
|
.charmap $32, $32
|
||||||
|
.charmap $33, $33
|
||||||
|
.charmap $34, $34
|
||||||
|
.charmap $35, $35
|
||||||
|
.charmap $36, $36
|
||||||
|
.charmap $37, $37
|
||||||
|
.charmap $38, $38
|
||||||
|
.charmap $39, $39
|
||||||
|
.charmap $3A, $3A
|
||||||
|
.charmap $3B, $3B
|
||||||
|
.charmap $3C, $3C
|
||||||
|
.charmap $3D, $3D
|
||||||
|
.charmap $3E, $3E
|
||||||
|
.charmap $3F, $3F
|
||||||
|
|
||||||
|
.charmap $40, $40
|
||||||
|
.charmap $41, $41
|
||||||
|
.charmap $42, $42
|
||||||
|
.charmap $43, $43
|
||||||
|
.charmap $44, $44
|
||||||
|
.charmap $45, $45
|
||||||
|
.charmap $46, $46
|
||||||
|
.charmap $47, $47
|
||||||
|
.charmap $48, $48
|
||||||
|
.charmap $49, $49
|
||||||
|
.charmap $4A, $4A
|
||||||
|
.charmap $4B, $4B
|
||||||
|
.charmap $4C, $4C
|
||||||
|
.charmap $4D, $4D
|
||||||
|
.charmap $4E, $4E
|
||||||
|
.charmap $4F, $4F
|
||||||
|
|
||||||
|
.charmap $50, $50
|
||||||
|
.charmap $51, $51
|
||||||
|
.charmap $52, $52
|
||||||
|
.charmap $53, $53
|
||||||
|
.charmap $54, $54
|
||||||
|
.charmap $55, $55
|
||||||
|
.charmap $56, $56
|
||||||
|
.charmap $57, $57
|
||||||
|
.charmap $58, $58
|
||||||
|
.charmap $59, $59
|
||||||
|
.charmap $5A, $5A
|
||||||
|
.charmap $5B, $5B
|
||||||
|
.charmap $5C, $5C
|
||||||
|
.charmap $5D, $5D
|
||||||
|
.charmap $5E, $5E
|
||||||
|
.charmap $5F, $5F
|
||||||
|
|
||||||
|
.charmap $60, $60
|
||||||
|
.charmap $61, $61
|
||||||
|
.charmap $62, $62
|
||||||
|
.charmap $63, $63
|
||||||
|
.charmap $64, $64
|
||||||
|
.charmap $65, $65
|
||||||
|
.charmap $66, $66
|
||||||
|
.charmap $67, $67
|
||||||
|
.charmap $68, $68
|
||||||
|
.charmap $69, $69
|
||||||
|
.charmap $6A, $6A
|
||||||
|
.charmap $6B, $6B
|
||||||
|
.charmap $6C, $6C
|
||||||
|
.charmap $6D, $6D
|
||||||
|
.charmap $6E, $6E
|
||||||
|
.charmap $6F, $6F
|
||||||
|
|
||||||
|
.charmap $70, $70
|
||||||
|
.charmap $71, $71
|
||||||
|
.charmap $72, $72
|
||||||
|
.charmap $73, $73
|
||||||
|
.charmap $74, $74
|
||||||
|
.charmap $75, $75
|
||||||
|
.charmap $76, $76
|
||||||
|
.charmap $77, $77
|
||||||
|
.charmap $78, $78
|
||||||
|
.charmap $79, $79
|
||||||
|
.charmap $7A, $7A
|
||||||
|
.charmap $7B, $7B
|
||||||
|
.charmap $7C, $7C
|
||||||
|
.charmap $7D, $7D
|
||||||
|
.charmap $7E, $7E
|
||||||
|
.charmap $7F, $7F
|
||||||
|
|
||||||
|
.charmap $80, $80
|
||||||
|
.charmap $81, $81
|
||||||
|
.charmap $82, $82
|
||||||
|
.charmap $83, $83
|
||||||
|
.charmap $84, $84
|
||||||
|
.charmap $85, $85
|
||||||
|
.charmap $86, $86
|
||||||
|
.charmap $87, $87
|
||||||
|
.charmap $88, $88
|
||||||
|
.charmap $89, $89
|
||||||
|
.charmap $8A, $8A
|
||||||
|
.charmap $8B, $8B
|
||||||
|
.charmap $8C, $8C
|
||||||
|
.charmap $8D, $8D
|
||||||
|
.charmap $8E, $8E
|
||||||
|
.charmap $8F, $8F
|
||||||
|
|
||||||
|
.charmap $90, $90
|
||||||
|
.charmap $91, $91
|
||||||
|
.charmap $92, $92
|
||||||
|
.charmap $93, $93
|
||||||
|
.charmap $94, $94
|
||||||
|
.charmap $95, $95
|
||||||
|
.charmap $96, $96
|
||||||
|
.charmap $97, $97
|
||||||
|
.charmap $98, $98
|
||||||
|
.charmap $99, $99
|
||||||
|
.charmap $9A, $9A
|
||||||
|
.charmap $9B, $9B
|
||||||
|
.charmap $9C, $9C
|
||||||
|
.charmap $9D, $9D
|
||||||
|
.charmap $9E, $9E
|
||||||
|
.charmap $9F, $9F
|
||||||
|
|
||||||
|
.charmap $A0, $A0
|
||||||
|
.charmap $A1, $A1
|
||||||
|
.charmap $A2, $A2
|
||||||
|
.charmap $A3, $A3
|
||||||
|
.charmap $A4, $A4
|
||||||
|
.charmap $A5, $A5
|
||||||
|
.charmap $A6, $A6
|
||||||
|
.charmap $A7, $A7
|
||||||
|
.charmap $A8, $A8
|
||||||
|
.charmap $A9, $A9
|
||||||
|
.charmap $AA, $AA
|
||||||
|
.charmap $AB, $AB
|
||||||
|
.charmap $AC, $AC
|
||||||
|
.charmap $AD, $AD
|
||||||
|
.charmap $AE, $AE
|
||||||
|
.charmap $AF, $AF
|
||||||
|
|
||||||
|
.charmap $B0, $B0
|
||||||
|
.charmap $B1, $B1
|
||||||
|
.charmap $B2, $B2
|
||||||
|
.charmap $B3, $B3
|
||||||
|
.charmap $B4, $B4
|
||||||
|
.charmap $B5, $B5
|
||||||
|
.charmap $B6, $B6
|
||||||
|
.charmap $B7, $B7
|
||||||
|
.charmap $B8, $B8
|
||||||
|
.charmap $B9, $B9
|
||||||
|
.charmap $BA, $BA
|
||||||
|
.charmap $BB, $BB
|
||||||
|
.charmap $BC, $BC
|
||||||
|
.charmap $BD, $BD
|
||||||
|
.charmap $BE, $BE
|
||||||
|
.charmap $BF, $BF
|
||||||
|
|
||||||
|
.charmap $C0, $C0
|
||||||
|
.charmap $C1, $C1
|
||||||
|
.charmap $C2, $C2
|
||||||
|
.charmap $C3, $C3
|
||||||
|
.charmap $C4, $C4
|
||||||
|
.charmap $C5, $C5
|
||||||
|
.charmap $C6, $C6
|
||||||
|
.charmap $C7, $C7
|
||||||
|
.charmap $C8, $C8
|
||||||
|
.charmap $C9, $C9
|
||||||
|
.charmap $CA, $CA
|
||||||
|
.charmap $CB, $CB
|
||||||
|
.charmap $CC, $CC
|
||||||
|
.charmap $CD, $CD
|
||||||
|
.charmap $CE, $CE
|
||||||
|
.charmap $CF, $CF
|
||||||
|
|
||||||
|
.charmap $D0, $D0
|
||||||
|
.charmap $D1, $D1
|
||||||
|
.charmap $D2, $D2
|
||||||
|
.charmap $D3, $D3
|
||||||
|
.charmap $D4, $D4
|
||||||
|
.charmap $D5, $D5
|
||||||
|
.charmap $D6, $D6
|
||||||
|
.charmap $D7, $D7
|
||||||
|
.charmap $D8, $D8
|
||||||
|
.charmap $D9, $D9
|
||||||
|
.charmap $DA, $DA
|
||||||
|
.charmap $DB, $DB
|
||||||
|
.charmap $DC, $DC
|
||||||
|
.charmap $DD, $DD
|
||||||
|
.charmap $DE, $DE
|
||||||
|
.charmap $DF, $DF
|
||||||
|
|
||||||
|
.charmap $E0, $E0
|
||||||
|
.charmap $E1, $E1
|
||||||
|
.charmap $E2, $E2
|
||||||
|
.charmap $E3, $E3
|
||||||
|
.charmap $E4, $E4
|
||||||
|
.charmap $E5, $E5
|
||||||
|
.charmap $E6, $E6
|
||||||
|
.charmap $E7, $E7
|
||||||
|
.charmap $E8, $E8
|
||||||
|
.charmap $E9, $E9
|
||||||
|
.charmap $EA, $EA
|
||||||
|
.charmap $EB, $EB
|
||||||
|
.charmap $EC, $EC
|
||||||
|
.charmap $ED, $ED
|
||||||
|
.charmap $EE, $EE
|
||||||
|
.charmap $EF, $EF
|
||||||
|
|
||||||
|
.charmap $F0, $F0
|
||||||
|
.charmap $F1, $F1
|
||||||
|
.charmap $F2, $F2
|
||||||
|
.charmap $F3, $F3
|
||||||
|
.charmap $F4, $F4
|
||||||
|
.charmap $F5, $F5
|
||||||
|
.charmap $F6, $F6
|
||||||
|
.charmap $F7, $F7
|
||||||
|
.charmap $F8, $F8
|
||||||
|
.charmap $F9, $F9
|
||||||
|
.charmap $FA, $FA
|
||||||
|
.charmap $FB, $FB
|
||||||
|
.charmap $FC, $FC
|
||||||
|
.charmap $FD, $FD
|
||||||
|
.charmap $FE, $FE
|
||||||
|
.charmap $FF, $FF
|
||||||
303
asminc/atari_screen_charmap.inc
Normal file
303
asminc/atari_screen_charmap.inc
Normal file
@@ -0,0 +1,303 @@
|
|||||||
|
;/*****************************************************************************/
|
||||||
|
;/* */
|
||||||
|
;/* atari_screen_charmap.inc */
|
||||||
|
;/* */
|
||||||
|
;/* Atari system internal string mapping ISO-8859-1 -> Internal/Screen-Code */
|
||||||
|
;/* */
|
||||||
|
;/* */
|
||||||
|
;/* */
|
||||||
|
;/* C 2016 Christian Krueger */
|
||||||
|
;/* */
|
||||||
|
;/* */
|
||||||
|
;/* This software is provided 'as-is', without any expressed or implied */
|
||||||
|
;/* warranty. In no event will the authors be held liable for any damages */
|
||||||
|
;/* arising from the use of this software. */
|
||||||
|
;/* */
|
||||||
|
;/* Permission is granted to anyone to use this software for any purpose, */
|
||||||
|
;/* including commercial applications, and to alter it and redistribute it */
|
||||||
|
;/* freely, subject to the following restrictions: */
|
||||||
|
;/* */
|
||||||
|
;/* 1. The origin of this software must not be misrepresented; you must not */
|
||||||
|
;/* claim that you wrote the original software. If you use this software */
|
||||||
|
;/* in a product, an acknowledgment in the product documentation would be */
|
||||||
|
;/* appreciated but is not required. */
|
||||||
|
;/* 2. Altered source versions must be plainly marked as such, and must not */
|
||||||
|
;/* be misrepresented as being the original software. */
|
||||||
|
;/* 3. This notice may not be removed or altered from any source */
|
||||||
|
;/* distribution. */
|
||||||
|
;/* */
|
||||||
|
;/*****************************************************************************/
|
||||||
|
|
||||||
|
.charmap $00, $40
|
||||||
|
.charmap $01, $41
|
||||||
|
.charmap $02, $42
|
||||||
|
.charmap $03, $43
|
||||||
|
.charmap $04, $44
|
||||||
|
.charmap $05, $45
|
||||||
|
.charmap $06, $46
|
||||||
|
.charmap $07, $FD
|
||||||
|
.charmap $08, $48
|
||||||
|
.charmap $09, $7F
|
||||||
|
.charmap $0A, $DB
|
||||||
|
.charmap $0B, $4B
|
||||||
|
.charmap $0C, $7D
|
||||||
|
.charmap $0D, $4D
|
||||||
|
.charmap $0E, $4E
|
||||||
|
.charmap $0F, $4F
|
||||||
|
|
||||||
|
.charmap $10, $50
|
||||||
|
.charmap $11, $51
|
||||||
|
.charmap $12, $52
|
||||||
|
.charmap $13, $53
|
||||||
|
.charmap $14, $54
|
||||||
|
.charmap $15, $55
|
||||||
|
.charmap $16, $56
|
||||||
|
.charmap $17, $57
|
||||||
|
.charmap $18, $58
|
||||||
|
.charmap $19, $59
|
||||||
|
.charmap $1A, $5A
|
||||||
|
.charmap $1B, $5B
|
||||||
|
.charmap $1C, $5C
|
||||||
|
.charmap $1D, $5D
|
||||||
|
.charmap $1E, $5E
|
||||||
|
.charmap $1F, $5F
|
||||||
|
|
||||||
|
.charmap $20, $00
|
||||||
|
|
||||||
|
.charmap $21, $01
|
||||||
|
.charmap $22, $02
|
||||||
|
.charmap $23, $03
|
||||||
|
.charmap $24, $04
|
||||||
|
.charmap $25, $05
|
||||||
|
.charmap $26, $06
|
||||||
|
.charmap $27, $07
|
||||||
|
.charmap $28, $08
|
||||||
|
.charmap $29, $09
|
||||||
|
.charmap $2A, $0A
|
||||||
|
.charmap $2B, $0B
|
||||||
|
.charmap $2C, $0C
|
||||||
|
.charmap $2D, $0D
|
||||||
|
.charmap $2E, $0E
|
||||||
|
.charmap $2F, $0F
|
||||||
|
|
||||||
|
.charmap $30, $10
|
||||||
|
.charmap $31, $11
|
||||||
|
.charmap $32, $12
|
||||||
|
.charmap $33, $13
|
||||||
|
.charmap $34, $14
|
||||||
|
.charmap $35, $15
|
||||||
|
.charmap $36, $16
|
||||||
|
.charmap $37, $17
|
||||||
|
.charmap $38, $18
|
||||||
|
.charmap $39, $19
|
||||||
|
.charmap $3A, $1A
|
||||||
|
.charmap $3B, $1B
|
||||||
|
.charmap $3C, $1C
|
||||||
|
.charmap $3D, $1D
|
||||||
|
.charmap $3E, $1E
|
||||||
|
.charmap $3F, $1F
|
||||||
|
|
||||||
|
.charmap $40, $20
|
||||||
|
.charmap $41, $21
|
||||||
|
.charmap $42, $22
|
||||||
|
.charmap $43, $23
|
||||||
|
.charmap $44, $24
|
||||||
|
.charmap $45, $25
|
||||||
|
.charmap $46, $26
|
||||||
|
.charmap $47, $27
|
||||||
|
.charmap $48, $28
|
||||||
|
.charmap $49, $29
|
||||||
|
.charmap $4A, $2A
|
||||||
|
.charmap $4B, $2B
|
||||||
|
.charmap $4C, $2C
|
||||||
|
.charmap $4D, $2D
|
||||||
|
.charmap $4E, $2E
|
||||||
|
.charmap $4F, $2F
|
||||||
|
|
||||||
|
.charmap $50, $30
|
||||||
|
.charmap $51, $31
|
||||||
|
.charmap $52, $32
|
||||||
|
.charmap $53, $33
|
||||||
|
.charmap $54, $34
|
||||||
|
.charmap $55, $35
|
||||||
|
.charmap $56, $36
|
||||||
|
.charmap $57, $37
|
||||||
|
.charmap $58, $38
|
||||||
|
.charmap $59, $39
|
||||||
|
.charmap $5A, $3A
|
||||||
|
.charmap $5B, $3B
|
||||||
|
.charmap $5C, $3C
|
||||||
|
.charmap $5D, $3D
|
||||||
|
.charmap $5E, $3E
|
||||||
|
.charmap $5F, $3F
|
||||||
|
|
||||||
|
.charmap $60, $60
|
||||||
|
.charmap $61, $61
|
||||||
|
.charmap $62, $62
|
||||||
|
.charmap $63, $63
|
||||||
|
.charmap $64, $64
|
||||||
|
.charmap $65, $65
|
||||||
|
.charmap $66, $66
|
||||||
|
.charmap $67, $67
|
||||||
|
.charmap $68, $68
|
||||||
|
.charmap $69, $69
|
||||||
|
.charmap $6A, $6A
|
||||||
|
.charmap $6B, $6B
|
||||||
|
.charmap $6C, $6C
|
||||||
|
.charmap $6D, $6D
|
||||||
|
.charmap $6E, $6E
|
||||||
|
.charmap $6F, $6F
|
||||||
|
|
||||||
|
.charmap $70, $70
|
||||||
|
.charmap $71, $71
|
||||||
|
.charmap $72, $72
|
||||||
|
.charmap $73, $73
|
||||||
|
.charmap $74, $74
|
||||||
|
.charmap $75, $75
|
||||||
|
.charmap $76, $76
|
||||||
|
.charmap $77, $77
|
||||||
|
.charmap $78, $78
|
||||||
|
.charmap $79, $79
|
||||||
|
.charmap $7A, $7A
|
||||||
|
.charmap $7B, $7B
|
||||||
|
.charmap $7C, $7C
|
||||||
|
.charmap $7D, $7D
|
||||||
|
.charmap $7E, $7E
|
||||||
|
.charmap $7F, $7F
|
||||||
|
|
||||||
|
.charmap $80, $C0
|
||||||
|
.charmap $81, $C1
|
||||||
|
.charmap $82, $C2
|
||||||
|
.charmap $83, $C3
|
||||||
|
.charmap $84, $C4
|
||||||
|
.charmap $85, $C5
|
||||||
|
.charmap $86, $C6
|
||||||
|
.charmap $87, $C7
|
||||||
|
.charmap $88, $C8
|
||||||
|
.charmap $89, $C9
|
||||||
|
.charmap $8A, $CA
|
||||||
|
.charmap $8B, $CB
|
||||||
|
.charmap $8C, $CC
|
||||||
|
.charmap $8D, $CD
|
||||||
|
.charmap $8E, $CE
|
||||||
|
.charmap $8F, $CF
|
||||||
|
|
||||||
|
.charmap $90, $D0
|
||||||
|
.charmap $91, $D1
|
||||||
|
.charmap $92, $D2
|
||||||
|
.charmap $93, $D3
|
||||||
|
.charmap $94, $D4
|
||||||
|
.charmap $95, $D5
|
||||||
|
.charmap $96, $D6
|
||||||
|
.charmap $97, $D7
|
||||||
|
.charmap $98, $D8
|
||||||
|
.charmap $99, $D9
|
||||||
|
.charmap $9A, $DA
|
||||||
|
.charmap $9B, $DB
|
||||||
|
.charmap $9C, $DC
|
||||||
|
.charmap $9D, $DD
|
||||||
|
.charmap $9E, $DE
|
||||||
|
.charmap $9F, $DF
|
||||||
|
|
||||||
|
.charmap $A0, $80
|
||||||
|
.charmap $A1, $81
|
||||||
|
.charmap $A2, $82
|
||||||
|
.charmap $A3, $83
|
||||||
|
.charmap $A4, $84
|
||||||
|
.charmap $A5, $85
|
||||||
|
.charmap $A6, $86
|
||||||
|
.charmap $A7, $87
|
||||||
|
.charmap $A8, $88
|
||||||
|
.charmap $A9, $89
|
||||||
|
.charmap $AA, $8A
|
||||||
|
.charmap $AB, $8B
|
||||||
|
.charmap $AC, $8C
|
||||||
|
.charmap $AD, $8D
|
||||||
|
.charmap $AE, $8E
|
||||||
|
.charmap $AF, $8F
|
||||||
|
|
||||||
|
.charmap $B0, $90
|
||||||
|
.charmap $B1, $91
|
||||||
|
.charmap $B2, $92
|
||||||
|
.charmap $B3, $93
|
||||||
|
.charmap $B4, $94
|
||||||
|
.charmap $B5, $95
|
||||||
|
.charmap $B6, $96
|
||||||
|
.charmap $B7, $97
|
||||||
|
.charmap $B8, $98
|
||||||
|
.charmap $B9, $99
|
||||||
|
.charmap $BA, $9A
|
||||||
|
.charmap $BB, $9B
|
||||||
|
.charmap $BC, $9C
|
||||||
|
.charmap $BD, $9D
|
||||||
|
.charmap $BE, $9E
|
||||||
|
.charmap $BF, $9F
|
||||||
|
|
||||||
|
.charmap $C0, $A0
|
||||||
|
.charmap $C1, $A1
|
||||||
|
.charmap $C2, $A2
|
||||||
|
.charmap $C3, $A3
|
||||||
|
.charmap $C4, $A4
|
||||||
|
.charmap $C5, $A5
|
||||||
|
.charmap $C6, $A6
|
||||||
|
.charmap $C7, $A7
|
||||||
|
.charmap $C8, $A8
|
||||||
|
.charmap $C9, $A9
|
||||||
|
.charmap $CA, $AA
|
||||||
|
.charmap $CB, $AB
|
||||||
|
.charmap $CC, $AC
|
||||||
|
.charmap $CD, $AD
|
||||||
|
.charmap $CE, $AE
|
||||||
|
.charmap $CF, $AF
|
||||||
|
|
||||||
|
.charmap $D0, $B0
|
||||||
|
.charmap $D1, $B1
|
||||||
|
.charmap $D2, $B2
|
||||||
|
.charmap $D3, $B3
|
||||||
|
.charmap $D4, $B4
|
||||||
|
.charmap $D5, $B5
|
||||||
|
.charmap $D6, $B6
|
||||||
|
.charmap $D7, $B7
|
||||||
|
.charmap $D8, $B8
|
||||||
|
.charmap $D9, $B9
|
||||||
|
.charmap $DA, $BA
|
||||||
|
.charmap $DB, $BB
|
||||||
|
.charmap $DC, $BC
|
||||||
|
.charmap $DD, $BD
|
||||||
|
.charmap $DE, $BE
|
||||||
|
.charmap $DF, $BF
|
||||||
|
|
||||||
|
.charmap $E0, $E0
|
||||||
|
.charmap $E1, $E1
|
||||||
|
.charmap $E2, $E2
|
||||||
|
.charmap $E3, $E3
|
||||||
|
.charmap $E4, $E4
|
||||||
|
.charmap $E5, $E5
|
||||||
|
.charmap $E6, $E6
|
||||||
|
.charmap $E7, $E7
|
||||||
|
.charmap $E8, $E8
|
||||||
|
.charmap $E9, $E9
|
||||||
|
.charmap $EA, $EA
|
||||||
|
.charmap $EB, $EB
|
||||||
|
.charmap $EC, $EC
|
||||||
|
.charmap $ED, $ED
|
||||||
|
.charmap $EE, $EE
|
||||||
|
.charmap $EF, $EF
|
||||||
|
|
||||||
|
.charmap $F0, $F0
|
||||||
|
.charmap $F1, $F1
|
||||||
|
.charmap $F2, $F2
|
||||||
|
.charmap $F3, $F3
|
||||||
|
.charmap $F4, $F4
|
||||||
|
.charmap $F5, $F5
|
||||||
|
.charmap $F6, $F6
|
||||||
|
.charmap $F7, $F7
|
||||||
|
.charmap $F8, $F8
|
||||||
|
.charmap $F9, $F9
|
||||||
|
.charmap $FA, $FA
|
||||||
|
.charmap $FB, $FB
|
||||||
|
.charmap $FC, $FC
|
||||||
|
.charmap $FD, $FD
|
||||||
|
.charmap $FE, $FE
|
||||||
|
.charmap $FF, $FF
|
||||||
|
|
||||||
@@ -7,6 +7,7 @@
|
|||||||
; Zero page, Commodore stuff
|
; Zero page, Commodore stuff
|
||||||
|
|
||||||
TXTPTR := $3D ; Pointer into BASIC source code
|
TXTPTR := $3D ; Pointer into BASIC source code
|
||||||
|
STATUS := $90 ; Kernal I/O completion status
|
||||||
TIME := $A0 ; 60HZ clock
|
TIME := $A0 ; 60HZ clock
|
||||||
FNAM_LEN := $B7 ; Length of filename
|
FNAM_LEN := $B7 ; Length of filename
|
||||||
SECADR := $B9 ; Secondary address
|
SECADR := $B9 ; Secondary address
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
VARTAB := $2D ; Pointer to start of BASIC variables
|
VARTAB := $2D ; Pointer to start of BASIC variables
|
||||||
MEMSIZE := $37 ; Pointer to highest BASIC RAM location (+1)
|
MEMSIZE := $37 ; Pointer to highest BASIC RAM location (+1)
|
||||||
TXTPTR := $7A ; Pointer into BASIC source code
|
TXTPTR := $7A ; Pointer into BASIC source code
|
||||||
|
STATUS := $90 ; Kernal I/O completion status
|
||||||
TIME := $A0 ; 60 HZ clock
|
TIME := $A0 ; 60 HZ clock
|
||||||
FNAM_LEN := $B7 ; Length of filename
|
FNAM_LEN := $B7 ; Length of filename
|
||||||
SECADR := $B9 ; Secondary address
|
SECADR := $B9 ; Secondary address
|
||||||
@@ -76,6 +77,8 @@ VIC_SPR_EXP_Y := $D017
|
|||||||
VIC_SPR_EXP_X := $D01D
|
VIC_SPR_EXP_X := $D01D
|
||||||
VIC_SPR_MCOLOR := $D01C
|
VIC_SPR_MCOLOR := $D01C
|
||||||
VIC_SPR_BG_PRIO := $D01B
|
VIC_SPR_BG_PRIO := $D01B
|
||||||
|
VIC_SPR_COLL := $D01E
|
||||||
|
VIC_SPR_BG_COLL := $D01F
|
||||||
|
|
||||||
VIC_SPR_MCOLOR0 := $D025
|
VIC_SPR_MCOLOR0 := $D025
|
||||||
VIC_SPR_MCOLOR1 := $D026
|
VIC_SPR_MCOLOR1 := $D026
|
||||||
|
|||||||
@@ -1,24 +1,81 @@
|
|||||||
;
|
;
|
||||||
; Olli Savia <ops@iki.fi>
|
; Olli Savia <ops@iki.fi>
|
||||||
|
; Greg King
|
||||||
;
|
;
|
||||||
; Commodore Kernal functions
|
; Commodore-compatibles Kernal functions
|
||||||
;
|
;
|
||||||
|
|
||||||
.if .def(__CX16__)
|
.if .def(__CX16__)
|
||||||
; CX16 extended jump table
|
; CX16 extended jump table
|
||||||
GETJOY := $FF06
|
KBDBUF_PEEK := $FEBD
|
||||||
|
KBDBUF_GET_MODIFIERS := $FEC0
|
||||||
|
KBDBUF_PUT := $FEC3
|
||||||
|
I2C_READ_BYTE := $FEC6
|
||||||
|
I2C_WRITE_BYTE := $FEC9
|
||||||
|
CX_MONITOR := $FECC
|
||||||
|
ENTROPY_GET := $FECF
|
||||||
|
CONSOLE_SET_PAGE_MSG := $FED5
|
||||||
|
CONSOLE_PUT_IMAGE := $FED8
|
||||||
|
CONSOLE_INIT := $FEDB
|
||||||
|
CONSOLE_PUT_CHAR := $FEDE
|
||||||
|
CONSOLE_GET_CHAR := $FEE1
|
||||||
|
MEMORY_FILL := $FEE4
|
||||||
|
MEMORY_COPY := $FEE7
|
||||||
|
MEMORY_CRC := $FEEA
|
||||||
|
MEMORY_DECOMPRESS := $FEED
|
||||||
|
SPRITE_SET_IMAGE := $FEF0
|
||||||
|
SPRITE_SET_POSITION := $FEF3
|
||||||
|
FB_INIT := $FEF6
|
||||||
|
FB_GET_INFO := $FEF9
|
||||||
|
FB_SET_PALETTE := $FEFC
|
||||||
|
FB_CURSOR_POSITION := $FEFF
|
||||||
|
FB_CURSOR_NEXT_LINE := $FF02
|
||||||
|
FB_GET_PIXEL := $FF05
|
||||||
|
FB_GET_PIXELS := $FF08
|
||||||
|
FB_SET_PIXEL := $FF0B
|
||||||
|
FB_SET_PIXELS := $FF0E
|
||||||
|
FB_SET_8_PIXELS := $FF11
|
||||||
|
FB_SET_8_PIXELS_OPAQUE := $FF14
|
||||||
|
FB_FILL_PIXELS := $FF17
|
||||||
|
FB_FILTER_PIXELS := $FF1A
|
||||||
|
FB_MOVE_PIXELS := $FF1D
|
||||||
|
GRAPH_INIT := $FF20
|
||||||
|
GRAPH_CLEAR := $FF23
|
||||||
|
GRAPH_SET_WINDOW := $FF26
|
||||||
|
GRAPH_SET_COLORS := $FF29
|
||||||
|
GRAPH_DRAW_LINE := $FF2C
|
||||||
|
GRAPH_DRAW_RECT := $FF2F
|
||||||
|
GRAPH_MOVE_RECT := $FF32
|
||||||
|
GRAPH_DRAW_OVAL := $FF35
|
||||||
|
GRAPH_DRAW_IMAGE := $FF38
|
||||||
|
GRAPH_SET_FONT := $FF3B
|
||||||
|
GRAPH_GET_CHAR_SIZE := $FF3E
|
||||||
|
GRAPH_PUT_CHAR := $FF41
|
||||||
|
MULTI_ACPTR := $FF44
|
||||||
|
RESTORE_BASIC := $FF47
|
||||||
|
CLOCK_SET_DATE_TIME := $FF4D
|
||||||
|
CLOCK_GET_DATE_TIME := $FF50
|
||||||
|
JOYSTICK_SCAN := $FF53
|
||||||
|
JOYSTICK_GET := $FF56
|
||||||
|
SCREEN_MODE := $FF5F
|
||||||
|
SCREEN_SET_CHARSET := $FF62
|
||||||
|
MOUSE_CONFIG := $FF68
|
||||||
|
MOUSE_GET := $FF6B
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
.if .def(__C128__)
|
.if .def(__C128__)
|
||||||
; C128 extended jump table
|
; C128 extended jump table
|
||||||
C64MODE := $FF4D
|
C64MODE := $FF4D
|
||||||
|
SWAPPER := $FF5F
|
||||||
SETBNK := $FF68
|
SETBNK := $FF68
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
.if .def(__C128__) || .def(__CX16__)
|
.if .def(__C128__) || .def(__CX16__)
|
||||||
; Extended jump table
|
; Extended jump table
|
||||||
CLSALL := $FF4A
|
CLSALL := $FF4A
|
||||||
SWAPPER := $FF5F
|
LKUPLA := $FF59
|
||||||
|
LKUPSA := $FF5C
|
||||||
|
PFKEY := $FF65
|
||||||
JSRFAR := $FF6E
|
JSRFAR := $FF6E
|
||||||
INDFET := $FF74
|
INDFET := $FF74
|
||||||
INDSTA := $FF77
|
INDSTA := $FF77
|
||||||
|
|||||||
291
asminc/cbm_petscii_charmap.inc
Normal file
291
asminc/cbm_petscii_charmap.inc
Normal file
@@ -0,0 +1,291 @@
|
|||||||
|
;/*****************************************************************************/
|
||||||
|
;/* */
|
||||||
|
;/* cbm_petscii_charmap.inc */
|
||||||
|
;/* */
|
||||||
|
;/* CBM system standard string mapping ISO-8859-1 -> PetSCII */
|
||||||
|
;/* */
|
||||||
|
;/* */
|
||||||
|
;/* 2019-03-10, Greg King */
|
||||||
|
;/* */
|
||||||
|
;/* This software is provided "as-is", without any expressed or implied */
|
||||||
|
;/* warranty. In no event will the authors be held liable for any damages */
|
||||||
|
;/* arising from the use of this software. */
|
||||||
|
;/* */
|
||||||
|
;/* Permission is granted to anyone to use this software for any purpose, */
|
||||||
|
;/* including commercial applications, and to alter it and redistribute it */
|
||||||
|
;/* freely, subject to the following restrictions: */
|
||||||
|
;/* */
|
||||||
|
;/* 1. The origin of this software must not be misrepresented; you must not */
|
||||||
|
;/* claim that you wrote the original software. If you use this software */
|
||||||
|
;/* in a product, an acknowledgment in the product documentation would be */
|
||||||
|
;/* appreciated, but is not required. */
|
||||||
|
;/* 2. Altered source versions must be plainly marked as such, and must not */
|
||||||
|
;/* be misrepresented as being the original software. */
|
||||||
|
;/* 3. This notice must not be removed or altered from any source */
|
||||||
|
;/* distribution. */
|
||||||
|
;/* */
|
||||||
|
;/*****************************************************************************/
|
||||||
|
|
||||||
|
.charmap $00, $00
|
||||||
|
.charmap $01, $01
|
||||||
|
.charmap $02, $02
|
||||||
|
.charmap $03, $03
|
||||||
|
.charmap $04, $04
|
||||||
|
.charmap $05, $05
|
||||||
|
.charmap $06, $06
|
||||||
|
.charmap $07, $07
|
||||||
|
.charmap $08, $14
|
||||||
|
.charmap $09, $09
|
||||||
|
.charmap $0A, $0D
|
||||||
|
.charmap $0B, $11
|
||||||
|
.charmap $0C, $93
|
||||||
|
.charmap $0D, $0A
|
||||||
|
.charmap $0E, $0E
|
||||||
|
.charmap $0F, $0F
|
||||||
|
.charmap $10, $10
|
||||||
|
.charmap $11, $0B
|
||||||
|
.charmap $12, $12
|
||||||
|
.charmap $13, $13
|
||||||
|
.charmap $14, $08
|
||||||
|
.charmap $15, $15
|
||||||
|
.charmap $16, $16
|
||||||
|
.charmap $17, $17
|
||||||
|
.charmap $18, $18
|
||||||
|
.charmap $19, $19
|
||||||
|
.charmap $1A, $1A
|
||||||
|
.charmap $1B, $1B
|
||||||
|
.charmap $1C, $1C
|
||||||
|
.charmap $1D, $1D
|
||||||
|
.charmap $1E, $1E
|
||||||
|
.charmap $1F, $1F
|
||||||
|
|
||||||
|
.charmap $20, $20
|
||||||
|
.charmap $21, $21
|
||||||
|
.charmap $22, $22
|
||||||
|
.charmap $23, $23
|
||||||
|
.charmap $24, $24
|
||||||
|
.charmap $25, $25
|
||||||
|
.charmap $26, $26
|
||||||
|
.charmap $27, $27
|
||||||
|
.charmap $28, $28
|
||||||
|
.charmap $29, $29
|
||||||
|
.charmap $2A, $2A
|
||||||
|
.charmap $2B, $2B
|
||||||
|
.charmap $2C, $2C
|
||||||
|
.charmap $2D, $2D
|
||||||
|
.charmap $2E, $2E
|
||||||
|
.charmap $2F, $2F
|
||||||
|
.charmap $30, $30
|
||||||
|
.charmap $31, $31
|
||||||
|
.charmap $32, $32
|
||||||
|
.charmap $33, $33
|
||||||
|
.charmap $34, $34
|
||||||
|
.charmap $35, $35
|
||||||
|
.charmap $36, $36
|
||||||
|
.charmap $37, $37
|
||||||
|
.charmap $38, $38
|
||||||
|
.charmap $39, $39
|
||||||
|
.charmap $3A, $3A
|
||||||
|
.charmap $3B, $3B
|
||||||
|
.charmap $3C, $3C
|
||||||
|
.charmap $3D, $3D
|
||||||
|
.charmap $3E, $3E
|
||||||
|
.charmap $3F, $3F
|
||||||
|
|
||||||
|
.charmap $40, $40
|
||||||
|
.charmap $41, $C1
|
||||||
|
.charmap $42, $C2
|
||||||
|
.charmap $43, $C3
|
||||||
|
.charmap $44, $C4
|
||||||
|
.charmap $45, $C5
|
||||||
|
.charmap $46, $C6
|
||||||
|
.charmap $47, $C7
|
||||||
|
.charmap $48, $C8
|
||||||
|
.charmap $49, $C9
|
||||||
|
.charmap $4A, $CA
|
||||||
|
.charmap $4B, $CB
|
||||||
|
.charmap $4C, $CC
|
||||||
|
.charmap $4D, $CD
|
||||||
|
.charmap $4E, $CE
|
||||||
|
.charmap $4F, $CF
|
||||||
|
.charmap $50, $D0
|
||||||
|
.charmap $51, $D1
|
||||||
|
.charmap $52, $D2
|
||||||
|
.charmap $53, $D3
|
||||||
|
.charmap $54, $D4
|
||||||
|
.charmap $55, $D5
|
||||||
|
.charmap $56, $D6
|
||||||
|
.charmap $57, $D7
|
||||||
|
.charmap $58, $D8
|
||||||
|
.charmap $59, $D9
|
||||||
|
.charmap $5A, $DA
|
||||||
|
.charmap $5B, $5B
|
||||||
|
.charmap $5C, $BF
|
||||||
|
.charmap $5D, $5D
|
||||||
|
.charmap $5E, $5E
|
||||||
|
.charmap $5F, $A4
|
||||||
|
|
||||||
|
.charmap $60, $AD
|
||||||
|
.charmap $61, $41
|
||||||
|
.charmap $62, $42
|
||||||
|
.charmap $63, $43
|
||||||
|
.charmap $64, $44
|
||||||
|
.charmap $65, $45
|
||||||
|
.charmap $66, $46
|
||||||
|
.charmap $67, $47
|
||||||
|
.charmap $68, $48
|
||||||
|
.charmap $69, $49
|
||||||
|
.charmap $6A, $4A
|
||||||
|
.charmap $6B, $4B
|
||||||
|
.charmap $6C, $4C
|
||||||
|
.charmap $6D, $4D
|
||||||
|
.charmap $6E, $4E
|
||||||
|
.charmap $6F, $4F
|
||||||
|
.charmap $70, $50
|
||||||
|
.charmap $71, $51
|
||||||
|
.charmap $72, $52
|
||||||
|
.charmap $73, $53
|
||||||
|
.charmap $74, $54
|
||||||
|
.charmap $75, $55
|
||||||
|
.charmap $76, $56
|
||||||
|
.charmap $77, $57
|
||||||
|
.charmap $78, $58
|
||||||
|
.charmap $79, $59
|
||||||
|
.charmap $7A, $5A
|
||||||
|
.charmap $7B, $B3
|
||||||
|
.charmap $7C, $DD
|
||||||
|
.charmap $7D, $AB
|
||||||
|
.charmap $7E, $B1
|
||||||
|
.charmap $7F, $DF
|
||||||
|
|
||||||
|
.charmap $80, $80
|
||||||
|
.charmap $81, $81
|
||||||
|
.charmap $82, $82
|
||||||
|
.charmap $83, $83
|
||||||
|
.charmap $84, $84
|
||||||
|
.charmap $85, $85
|
||||||
|
.charmap $86, $86
|
||||||
|
.charmap $87, $87
|
||||||
|
.charmap $88, $88
|
||||||
|
.charmap $89, $89
|
||||||
|
.charmap $8A, $8A
|
||||||
|
.charmap $8B, $8B
|
||||||
|
.charmap $8C, $8C
|
||||||
|
.charmap $8D, $8D
|
||||||
|
.charmap $8E, $8E
|
||||||
|
.charmap $8F, $8F
|
||||||
|
.charmap $90, $90
|
||||||
|
.charmap $91, $91
|
||||||
|
.charmap $92, $92
|
||||||
|
.charmap $93, $0C
|
||||||
|
.charmap $94, $94
|
||||||
|
.charmap $95, $95
|
||||||
|
.charmap $96, $96
|
||||||
|
.charmap $97, $97
|
||||||
|
.charmap $98, $98
|
||||||
|
.charmap $99, $99
|
||||||
|
.charmap $9A, $9A
|
||||||
|
.charmap $9B, $9B
|
||||||
|
.charmap $9C, $9C
|
||||||
|
.charmap $9D, $9D
|
||||||
|
.charmap $9E, $9E
|
||||||
|
.charmap $9F, $9F
|
||||||
|
|
||||||
|
.charmap $A0, $A0
|
||||||
|
.charmap $A1, $A1
|
||||||
|
.charmap $A2, $A2
|
||||||
|
.charmap $A3, $A3
|
||||||
|
.charmap $A4, $A4
|
||||||
|
.charmap $A5, $A5
|
||||||
|
.charmap $A6, $A6
|
||||||
|
.charmap $A7, $A7
|
||||||
|
.charmap $A8, $A8
|
||||||
|
.charmap $A9, $A9
|
||||||
|
.charmap $AA, $AA
|
||||||
|
.charmap $AB, $AB
|
||||||
|
.charmap $AC, $AC
|
||||||
|
.charmap $AD, $AD
|
||||||
|
.charmap $AE, $AE
|
||||||
|
.charmap $AF, $AF
|
||||||
|
.charmap $B0, $B0
|
||||||
|
.charmap $B1, $B1
|
||||||
|
.charmap $B2, $B2
|
||||||
|
.charmap $B3, $B3
|
||||||
|
.charmap $B4, $B4
|
||||||
|
.charmap $B5, $B5
|
||||||
|
.charmap $B6, $B6
|
||||||
|
.charmap $B7, $B7
|
||||||
|
.charmap $B8, $B8
|
||||||
|
.charmap $B9, $B9
|
||||||
|
.charmap $BA, $BA
|
||||||
|
.charmap $BB, $BB
|
||||||
|
.charmap $BC, $BC
|
||||||
|
.charmap $BD, $BD
|
||||||
|
.charmap $BE, $BE
|
||||||
|
.charmap $BF, $BF
|
||||||
|
|
||||||
|
.charmap $C0, $60
|
||||||
|
.charmap $C1, $61
|
||||||
|
.charmap $C2, $62
|
||||||
|
.charmap $C3, $63
|
||||||
|
.charmap $C4, $64
|
||||||
|
.charmap $C5, $65
|
||||||
|
.charmap $C6, $66
|
||||||
|
.charmap $C7, $67
|
||||||
|
.charmap $C8, $68
|
||||||
|
.charmap $C9, $69
|
||||||
|
.charmap $CA, $6A
|
||||||
|
.charmap $CB, $6B
|
||||||
|
.charmap $CC, $6C
|
||||||
|
.charmap $CD, $6D
|
||||||
|
.charmap $CE, $6E
|
||||||
|
.charmap $CF, $6F
|
||||||
|
.charmap $D0, $70
|
||||||
|
.charmap $D1, $71
|
||||||
|
.charmap $D2, $72
|
||||||
|
.charmap $D3, $73
|
||||||
|
.charmap $D4, $74
|
||||||
|
.charmap $D5, $75
|
||||||
|
.charmap $D6, $76
|
||||||
|
.charmap $D7, $77
|
||||||
|
.charmap $D8, $78
|
||||||
|
.charmap $D9, $79
|
||||||
|
.charmap $DA, $7A
|
||||||
|
.charmap $DB, $7B
|
||||||
|
.charmap $DC, $7C
|
||||||
|
.charmap $DD, $7D
|
||||||
|
.charmap $DE, $7E
|
||||||
|
.charmap $DF, $7F
|
||||||
|
|
||||||
|
.charmap $E0, $E0
|
||||||
|
.charmap $E1, $E1
|
||||||
|
.charmap $E2, $E2
|
||||||
|
.charmap $E3, $E3
|
||||||
|
.charmap $E4, $E4
|
||||||
|
.charmap $E5, $E5
|
||||||
|
.charmap $E6, $E6
|
||||||
|
.charmap $E7, $E7
|
||||||
|
.charmap $E8, $E8
|
||||||
|
.charmap $E9, $E9
|
||||||
|
.charmap $EA, $EA
|
||||||
|
.charmap $EB, $EB
|
||||||
|
.charmap $EC, $EC
|
||||||
|
.charmap $ED, $ED
|
||||||
|
.charmap $EE, $EE
|
||||||
|
.charmap $EF, $EF
|
||||||
|
.charmap $F0, $F0
|
||||||
|
.charmap $F1, $F1
|
||||||
|
.charmap $F2, $F2
|
||||||
|
.charmap $F3, $F3
|
||||||
|
.charmap $F4, $F4
|
||||||
|
.charmap $F5, $F5
|
||||||
|
.charmap $F6, $F6
|
||||||
|
.charmap $F7, $F7
|
||||||
|
.charmap $F8, $F8
|
||||||
|
.charmap $F9, $F9
|
||||||
|
.charmap $FA, $FA
|
||||||
|
.charmap $FB, $FB
|
||||||
|
.charmap $FC, $FC
|
||||||
|
.charmap $FD, $FD
|
||||||
|
.charmap $FE, $FE
|
||||||
|
.charmap $FF, $FF
|
||||||
305
asminc/cbm_screen_charmap.inc
Normal file
305
asminc/cbm_screen_charmap.inc
Normal file
@@ -0,0 +1,305 @@
|
|||||||
|
;/*****************************************************************************/
|
||||||
|
;/* */
|
||||||
|
;/* cbm_screen_charmap.inc */
|
||||||
|
;/* */
|
||||||
|
;/* c Copyright 2019, Gerhard W. Gruber (sparhawk@gmx.at) */
|
||||||
|
;/* */
|
||||||
|
;/* When using CBM mode, this include converts character literals */
|
||||||
|
;/* from ASCII to screen-code mapping, so you can write directly */
|
||||||
|
;/* to the screen memory. */
|
||||||
|
;/* */
|
||||||
|
;/* If this include is used, no additional macros are needed. */
|
||||||
|
;/* */
|
||||||
|
;/*****************************************************************************/
|
||||||
|
|
||||||
|
; Char $00 -> c + 128
|
||||||
|
.charmap $00, $80
|
||||||
|
|
||||||
|
; Char $01 ... $1A -> c + 128 + 64 control alphabet
|
||||||
|
.charmap $01, $C1
|
||||||
|
.charmap $02, $C2
|
||||||
|
.charmap $03, $C3
|
||||||
|
.charmap $04, $C4
|
||||||
|
.charmap $05, $C5
|
||||||
|
.charmap $06, $C6
|
||||||
|
.charmap $07, $C7
|
||||||
|
.charmap $08, $C8
|
||||||
|
.charmap $09, $C9
|
||||||
|
.charmap $0A, $CA
|
||||||
|
.charmap $0B, $CB
|
||||||
|
.charmap $0C, $CC
|
||||||
|
.charmap $0D, $CD
|
||||||
|
.charmap $0E, $CE
|
||||||
|
.charmap $0F, $CF
|
||||||
|
.charmap $10, $D0
|
||||||
|
.charmap $11, $D1
|
||||||
|
.charmap $12, $D2
|
||||||
|
.charmap $13, $D3
|
||||||
|
.charmap $14, $D4
|
||||||
|
.charmap $15, $D5
|
||||||
|
.charmap $16, $D6
|
||||||
|
.charmap $17, $D7
|
||||||
|
.charmap $18, $D8
|
||||||
|
.charmap $19, $D9
|
||||||
|
.charmap $1A, $DA
|
||||||
|
|
||||||
|
; Char $1B ... $1F -> c + 128
|
||||||
|
.charmap $1B, $9B
|
||||||
|
.charmap $1C, $9C
|
||||||
|
.charmap $1D, $9D
|
||||||
|
.charmap $1E, $9E
|
||||||
|
.charmap $1F, $9F
|
||||||
|
|
||||||
|
; Char $20 ... $3F -> c
|
||||||
|
.charmap $20, $20
|
||||||
|
.charmap $21, $21
|
||||||
|
.charmap $22, $22
|
||||||
|
.charmap $23, $23
|
||||||
|
.charmap $24, $24
|
||||||
|
.charmap $25, $25
|
||||||
|
.charmap $26, $26
|
||||||
|
.charmap $27, $27
|
||||||
|
.charmap $28, $28
|
||||||
|
.charmap $29, $29
|
||||||
|
.charmap $2A, $2A
|
||||||
|
.charmap $2B, $2B
|
||||||
|
.charmap $2C, $2C
|
||||||
|
.charmap $2D, $2D
|
||||||
|
.charmap $2E, $2E
|
||||||
|
.charmap $2F, $2F
|
||||||
|
.charmap $30, $30
|
||||||
|
.charmap $31, $31
|
||||||
|
.charmap $32, $32
|
||||||
|
.charmap $33, $33
|
||||||
|
.charmap $34, $34
|
||||||
|
.charmap $35, $35
|
||||||
|
.charmap $36, $36
|
||||||
|
.charmap $37, $37
|
||||||
|
.charmap $38, $38
|
||||||
|
.charmap $39, $39
|
||||||
|
.charmap $3A, $3A
|
||||||
|
.charmap $3B, $3B
|
||||||
|
.charmap $3C, $3C
|
||||||
|
.charmap $3D, $3D
|
||||||
|
.charmap $3E, $3E
|
||||||
|
.charmap $3F, $3F
|
||||||
|
|
||||||
|
; Char $40 -> c - 64
|
||||||
|
.charmap $40, $00
|
||||||
|
|
||||||
|
; Char $41 ... $5A -> c upper-case alphabet
|
||||||
|
.charmap $41, $41
|
||||||
|
.charmap $42, $42
|
||||||
|
.charmap $43, $43
|
||||||
|
.charmap $44, $44
|
||||||
|
.charmap $45, $45
|
||||||
|
.charmap $46, $46
|
||||||
|
.charmap $47, $47
|
||||||
|
.charmap $48, $48
|
||||||
|
.charmap $49, $49
|
||||||
|
.charmap $4A, $4A
|
||||||
|
.charmap $4B, $4B
|
||||||
|
.charmap $4C, $4C
|
||||||
|
.charmap $4D, $4D
|
||||||
|
.charmap $4E, $4E
|
||||||
|
.charmap $4F, $4F
|
||||||
|
.charmap $50, $50
|
||||||
|
.charmap $51, $51
|
||||||
|
.charmap $52, $52
|
||||||
|
.charmap $53, $53
|
||||||
|
.charmap $54, $54
|
||||||
|
.charmap $55, $55
|
||||||
|
.charmap $56, $56
|
||||||
|
.charmap $57, $57
|
||||||
|
.charmap $58, $58
|
||||||
|
.charmap $59, $59
|
||||||
|
.charmap $5A, $5A
|
||||||
|
|
||||||
|
; Char $5B ... $5F -> c - 64
|
||||||
|
.charmap $5B, $1B
|
||||||
|
.charmap $5C, $1C
|
||||||
|
.charmap $5D, $1D
|
||||||
|
.charmap $5E, $1E
|
||||||
|
.charmap $5F, $1F
|
||||||
|
|
||||||
|
; Char $60 -> c - 32
|
||||||
|
.charmap $60, $40
|
||||||
|
|
||||||
|
; Char $61 ... $7A -> c - 32 - 64 lower-case alphabet
|
||||||
|
.charmap $61, $01
|
||||||
|
.charmap $62, $02
|
||||||
|
.charmap $63, $03
|
||||||
|
.charmap $64, $04
|
||||||
|
.charmap $65, $05
|
||||||
|
.charmap $66, $06
|
||||||
|
.charmap $67, $07
|
||||||
|
.charmap $68, $08
|
||||||
|
.charmap $69, $09
|
||||||
|
.charmap $6A, $0A
|
||||||
|
.charmap $6B, $0B
|
||||||
|
.charmap $6C, $0C
|
||||||
|
.charmap $6D, $0D
|
||||||
|
.charmap $6E, $0E
|
||||||
|
.charmap $6F, $0F
|
||||||
|
.charmap $70, $10
|
||||||
|
.charmap $71, $11
|
||||||
|
.charmap $72, $12
|
||||||
|
.charmap $73, $13
|
||||||
|
.charmap $74, $14
|
||||||
|
.charmap $75, $15
|
||||||
|
.charmap $76, $16
|
||||||
|
.charmap $77, $17
|
||||||
|
.charmap $78, $18
|
||||||
|
.charmap $79, $19
|
||||||
|
.charmap $7A, $1A
|
||||||
|
|
||||||
|
; Char $7B ... $7F -> c - 32
|
||||||
|
.charmap $7B, $5B
|
||||||
|
.charmap $7C, $5C
|
||||||
|
.charmap $7D, $5D
|
||||||
|
.charmap $7E, $5E
|
||||||
|
.charmap $7F, $5F
|
||||||
|
|
||||||
|
; Char $80 -> c + 64
|
||||||
|
.charmap $80, $C0
|
||||||
|
|
||||||
|
; Char $81 ... $9A -> c control alphabet
|
||||||
|
.charmap $81, $81
|
||||||
|
.charmap $82, $82
|
||||||
|
.charmap $83, $83
|
||||||
|
.charmap $84, $84
|
||||||
|
.charmap $85, $85
|
||||||
|
.charmap $86, $86
|
||||||
|
.charmap $87, $87
|
||||||
|
.charmap $88, $88
|
||||||
|
.charmap $89, $89
|
||||||
|
.charmap $8A, $8A
|
||||||
|
.charmap $8B, $8B
|
||||||
|
.charmap $8C, $8C
|
||||||
|
.charmap $8D, $8D
|
||||||
|
.charmap $8E, $8E
|
||||||
|
.charmap $8F, $8F
|
||||||
|
.charmap $90, $90
|
||||||
|
.charmap $91, $91
|
||||||
|
.charmap $92, $92
|
||||||
|
.charmap $93, $93
|
||||||
|
.charmap $94, $94
|
||||||
|
.charmap $95, $95
|
||||||
|
.charmap $96, $96
|
||||||
|
.charmap $97, $97
|
||||||
|
.charmap $98, $98
|
||||||
|
.charmap $99, $99
|
||||||
|
.charmap $9A, $9A
|
||||||
|
|
||||||
|
; Char $9B ... $9F -> c + 64
|
||||||
|
.charmap $9B, $DB
|
||||||
|
.charmap $9C, $DC
|
||||||
|
.charmap $9D, $DD
|
||||||
|
.charmap $9E, $DE
|
||||||
|
.charmap $9F, $DF
|
||||||
|
|
||||||
|
; Char $A0 ... $BF -> c - 64
|
||||||
|
.charmap $A0, $60
|
||||||
|
.charmap $A1, $61
|
||||||
|
.charmap $A2, $62
|
||||||
|
.charmap $A3, $63
|
||||||
|
.charmap $A4, $64
|
||||||
|
.charmap $A5, $65
|
||||||
|
.charmap $A6, $66
|
||||||
|
.charmap $A7, $67
|
||||||
|
.charmap $A8, $68
|
||||||
|
.charmap $A9, $69
|
||||||
|
.charmap $AA, $6A
|
||||||
|
.charmap $AB, $6B
|
||||||
|
.charmap $AC, $6C
|
||||||
|
.charmap $AD, $6D
|
||||||
|
.charmap $AE, $6E
|
||||||
|
.charmap $AF, $6F
|
||||||
|
.charmap $B0, $70
|
||||||
|
.charmap $B1, $71
|
||||||
|
.charmap $B2, $72
|
||||||
|
.charmap $B3, $73
|
||||||
|
.charmap $B4, $74
|
||||||
|
.charmap $B5, $75
|
||||||
|
.charmap $B6, $76
|
||||||
|
.charmap $B7, $77
|
||||||
|
.charmap $B8, $78
|
||||||
|
.charmap $B9, $79
|
||||||
|
.charmap $BA, $7A
|
||||||
|
.charmap $BB, $7B
|
||||||
|
.charmap $BC, $7C
|
||||||
|
.charmap $BD, $7D
|
||||||
|
.charmap $BE, $7E
|
||||||
|
.charmap $BF, $7F
|
||||||
|
|
||||||
|
; Char $C0 ... $DF -> c - 128
|
||||||
|
.charmap $C0, $40
|
||||||
|
|
||||||
|
; Char $C1 ... $DA -> c - 128 - 64 lower-case alphabet
|
||||||
|
.charmap $C1, $01
|
||||||
|
.charmap $C2, $02
|
||||||
|
.charmap $C3, $03
|
||||||
|
.charmap $C4, $04
|
||||||
|
.charmap $C5, $05
|
||||||
|
.charmap $C6, $06
|
||||||
|
.charmap $C7, $07
|
||||||
|
.charmap $C8, $08
|
||||||
|
.charmap $C9, $09
|
||||||
|
.charmap $CA, $0A
|
||||||
|
.charmap $CB, $0B
|
||||||
|
.charmap $CC, $0C
|
||||||
|
.charmap $CD, $0D
|
||||||
|
.charmap $CE, $0E
|
||||||
|
.charmap $CF, $0F
|
||||||
|
.charmap $D0, $10
|
||||||
|
.charmap $D1, $11
|
||||||
|
.charmap $D2, $12
|
||||||
|
.charmap $D3, $13
|
||||||
|
.charmap $D4, $14
|
||||||
|
.charmap $D5, $15
|
||||||
|
.charmap $D6, $16
|
||||||
|
.charmap $D7, $17
|
||||||
|
.charmap $D8, $18
|
||||||
|
.charmap $D9, $19
|
||||||
|
.charmap $DA, $1A
|
||||||
|
|
||||||
|
; Char $DB ... $DF -> c - 128
|
||||||
|
.charmap $DB, $5B
|
||||||
|
.charmap $DC, $5C
|
||||||
|
.charmap $DD, $5D
|
||||||
|
.charmap $DE, $5E
|
||||||
|
.charmap $DF, $5F
|
||||||
|
|
||||||
|
; Char $E0 ... $FF -> c - 128
|
||||||
|
.charmap $E0, $60
|
||||||
|
.charmap $E1, $61
|
||||||
|
.charmap $E2, $62
|
||||||
|
.charmap $E3, $63
|
||||||
|
.charmap $E4, $64
|
||||||
|
.charmap $E5, $65
|
||||||
|
.charmap $E6, $66
|
||||||
|
.charmap $E7, $67
|
||||||
|
.charmap $E8, $68
|
||||||
|
.charmap $E9, $69
|
||||||
|
.charmap $EA, $6A
|
||||||
|
.charmap $EB, $6B
|
||||||
|
.charmap $EC, $6C
|
||||||
|
.charmap $ED, $6D
|
||||||
|
.charmap $EE, $6E
|
||||||
|
.charmap $EF, $6F
|
||||||
|
.charmap $F0, $70
|
||||||
|
.charmap $F1, $71
|
||||||
|
.charmap $F2, $72
|
||||||
|
.charmap $F3, $73
|
||||||
|
.charmap $F4, $74
|
||||||
|
.charmap $F5, $75
|
||||||
|
.charmap $F6, $76
|
||||||
|
.charmap $F7, $77
|
||||||
|
.charmap $F8, $78
|
||||||
|
.charmap $F9, $79
|
||||||
|
.charmap $FA, $7A
|
||||||
|
.charmap $FB, $7B
|
||||||
|
.charmap $FC, $7C
|
||||||
|
.charmap $FD, $7D
|
||||||
|
.charmap $FE, $7E
|
||||||
|
.charmap $FF, $7F
|
||||||
@@ -2,18 +2,20 @@
|
|||||||
CPU_ISET_NONE = $0001
|
CPU_ISET_NONE = $0001
|
||||||
CPU_ISET_6502 = $0002
|
CPU_ISET_6502 = $0002
|
||||||
CPU_ISET_6502X = $0004
|
CPU_ISET_6502X = $0004
|
||||||
CPU_ISET_65SC02 = $0008
|
CPU_ISET_6502DTV = $0008
|
||||||
CPU_ISET_65C02 = $0010
|
CPU_ISET_65SC02 = $0010
|
||||||
CPU_ISET_65816 = $0020
|
CPU_ISET_65C02 = $0020
|
||||||
CPU_ISET_SWEET16 = $0040
|
CPU_ISET_65816 = $0040
|
||||||
CPU_ISET_HUC6280 = $0080
|
CPU_ISET_SWEET16 = $0080
|
||||||
;CPU_ISET_M740 = $0100 not actually implemented
|
CPU_ISET_HUC6280 = $0100
|
||||||
CPU_ISET_4510 = $0200
|
;CPU_ISET_M740 = $0200 not actually implemented
|
||||||
|
CPU_ISET_4510 = $0400
|
||||||
|
|
||||||
; CPU capabilities
|
; CPU capabilities
|
||||||
CPU_NONE = CPU_ISET_NONE
|
CPU_NONE = CPU_ISET_NONE
|
||||||
CPU_6502 = CPU_ISET_6502
|
CPU_6502 = CPU_ISET_6502
|
||||||
CPU_6502X = CPU_ISET_6502|CPU_ISET_6502X
|
CPU_6502X = CPU_ISET_6502|CPU_ISET_6502X
|
||||||
|
CPU_6502DTV = CPU_ISET_6502|CPU_ISET_6502DTV
|
||||||
CPU_65SC02 = CPU_ISET_6502|CPU_ISET_65SC02
|
CPU_65SC02 = CPU_ISET_6502|CPU_ISET_65SC02
|
||||||
CPU_65C02 = CPU_ISET_6502|CPU_ISET_65SC02|CPU_ISET_65C02
|
CPU_65C02 = CPU_ISET_6502|CPU_ISET_65SC02|CPU_ISET_65C02
|
||||||
CPU_65816 = CPU_ISET_6502|CPU_ISET_65SC02|CPU_ISET_65816
|
CPU_65816 = CPU_ISET_6502|CPU_ISET_65SC02|CPU_ISET_65816
|
||||||
|
|||||||
@@ -5,21 +5,21 @@
|
|||||||
;** Screen
|
;** Screen
|
||||||
SCREEN_ROWS = 24
|
SCREEN_ROWS = 24
|
||||||
SCREEN_COLS = 32
|
SCREEN_COLS = 32
|
||||||
SCREEN_PTR = $3A
|
SCREEN_PTR := $3A
|
||||||
CURSOR_X = $3C
|
CURSOR_X := $3C
|
||||||
CURSOR_Y = $3D
|
CURSOR_Y := $3D
|
||||||
|
|
||||||
;** VDP
|
;** VDP
|
||||||
VDP_DATA_R = $2000
|
VDP_DATA_R := $2000
|
||||||
VDP_STATUS_R = $2001
|
VDP_STATUS_R := $2001
|
||||||
VDP_DATA_W = $3000
|
VDP_DATA_W := $3000
|
||||||
VDP_CONTROL_W = $3001
|
VDP_CONTROL_W := $3001
|
||||||
|
|
||||||
;** PIA
|
;** PIA
|
||||||
PIA0_DATA = $1000
|
PIA0_DATA := $1000
|
||||||
PIA0_STATUS = $1001
|
PIA0_STATUS := $1001
|
||||||
PIA1_DATA = $1002
|
PIA1_DATA := $1002
|
||||||
PIA1_STATUS = $1003
|
PIA1_STATUS := $1003
|
||||||
|
|
||||||
;** General
|
;** General
|
||||||
CH_VLINE = 33
|
CH_VLINE = 33
|
||||||
@@ -30,11 +30,11 @@ CH_LLCORNER = 37
|
|||||||
CH_LRCORNER = 38
|
CH_LRCORNER = 38
|
||||||
|
|
||||||
;** I/O (Zero-page variables)
|
;** I/O (Zero-page variables)
|
||||||
ZP_KEYBOARD = $10
|
ZP_KEYBOARD := $10
|
||||||
ZP_JOY0_DIR = $11
|
ZP_JOY0_DIR := $11
|
||||||
ZP_JOY1_DIR = $13
|
ZP_JOY1_DIR := $13
|
||||||
ZP_JOY0_BUTTONS = $16
|
ZP_JOY0_BUTTONS := $16
|
||||||
ZP_JOY1_BUTTONS = $17
|
ZP_JOY1_BUTTONS := $17
|
||||||
|
|
||||||
;** Joystick direction values (ZP_JOY0_DIR/ZP_JOY1_DIR)
|
;** Joystick direction values (ZP_JOY0_DIR/ZP_JOY1_DIR)
|
||||||
JOY_N = $49
|
JOY_N = $49
|
||||||
@@ -54,8 +54,13 @@ JOY_WNW = $4C
|
|||||||
JOY_NW = $4B
|
JOY_NW = $4B
|
||||||
JOY_NNW = $4A
|
JOY_NNW = $4A
|
||||||
|
|
||||||
;** BIOS
|
;** BIOS routines
|
||||||
BIOS_IRQ1_ADDR = $FF3F
|
BIOS_NMI_RESET_ADDR := $F808
|
||||||
BIOS_IRQ2_ADDR = $FF52
|
BIOS_PLAY_TUNE1 := $FBD6
|
||||||
BIOS_NMI_RESET_ADDR = $F808
|
BIOS_PLAY_SONG := $FBED
|
||||||
BIOS_WRITE_VDP_REG = $FE1F
|
BIOS_PLAY_TUNE2 := $FCE6
|
||||||
|
BIOS_WRITE_VDP_REG := $FE1F
|
||||||
|
BIOS_QUIET_PSG := $FE54
|
||||||
|
BIOS_POKE_PSG := $FE77
|
||||||
|
BIOS_IRQ1_ADDR := $FF3F
|
||||||
|
BIOS_IRQ2_ADDR := $FF52
|
||||||
|
|||||||
@@ -1,29 +1,31 @@
|
|||||||
|
; ctype.inc
|
||||||
|
;
|
||||||
|
; This file is part of
|
||||||
|
; cc65 - a freeware C compiler for 6502 based systems
|
||||||
|
;
|
||||||
|
; https://cc65.github.io
|
||||||
|
;
|
||||||
|
; See "LICENSE" file for legal information.
|
||||||
;
|
;
|
||||||
; Definitions for the character type tables
|
; Definitions for the character type tables
|
||||||
;
|
;
|
||||||
; Ullrich von Bassewitz, 08.09.2001
|
; Ullrich von Bassewitz, 08.09.2001
|
||||||
;
|
;
|
||||||
|
|
||||||
; Make the __ctype table an exported/imported symbol
|
|
||||||
|
|
||||||
.global __ctype
|
|
||||||
|
|
||||||
; Define bitmapped constants for the table entries
|
; Define bitmapped constants for the table entries
|
||||||
|
|
||||||
CT_NONE = $00 ; Nothing special
|
CT_NONE = %00000000 ; Nothing special
|
||||||
CT_LOWER = $01 ; 0 - Lower case char
|
CT_LOWER = %00000001 ; 0 - Lower case char
|
||||||
CT_UPPER = $02 ; 1 - Upper case char
|
CT_UPPER = %00000010 ; 1 - Upper case char
|
||||||
CT_DIGIT = $04 ; 2 - Numeric digit
|
CT_DIGIT = %00000100 ; 2 - Numeric digit
|
||||||
CT_XDIGIT = $08 ; 3 - Hex digit (both, lower and upper)
|
CT_XDIGIT = %00001000 ; 3 - Hex digit (both, lower and upper)
|
||||||
CT_CTRL = $10 ; 4 - Control character
|
CT_CTRL = %00010000 ; 4 - Control character
|
||||||
CT_SPACE = $20 ; 5 - The space character itself
|
CT_SPACE = %00100000 ; 5 - The space character itself
|
||||||
CT_OTHER_WS = $40 ; 6 - Other whitespace ('\f', '\n', '\r', '\t' and '\v')
|
CT_OTHER_WS = %01000000 ; 6 - Other whitespace ('\f', '\n', '\r', '\t' and '\v')
|
||||||
CT_SPACE_TAB = $80 ; 7 - Space or tab character
|
CT_SPACE_TAB = %10000000 ; 7 - Space or tab character
|
||||||
|
|
||||||
; Combined stuff
|
; Combined stuff
|
||||||
CT_ALNUM = (CT_LOWER | CT_UPPER | CT_DIGIT)
|
CT_ALNUM = (CT_LOWER | CT_UPPER | CT_DIGIT)
|
||||||
CT_ALPHA = (CT_LOWER | CT_UPPER)
|
CT_ALPHA = (CT_LOWER | CT_UPPER)
|
||||||
CT_CTRL_SPACE = (CT_CTRL | CT_SPACE)
|
CT_CTRL_SPACE = (CT_CTRL | CT_SPACE)
|
||||||
CT_NOT_PUNCT = (CT_SPACE | CT_CTRL | CT_DIGIT | CT_UPPER | CT_LOWER)
|
CT_NOT_PUNCT = (CT_SPACE | CT_CTRL | CT_DIGIT | CT_UPPER | CT_LOWER)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
91
asminc/ctype_common.inc
Normal file
91
asminc/ctype_common.inc
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
; ctype_common.inc
|
||||||
|
;
|
||||||
|
; This file is part of
|
||||||
|
; cc65 - a freeware C compiler for 6502 based systems
|
||||||
|
;
|
||||||
|
; https://cc65.github.io
|
||||||
|
;
|
||||||
|
; See "LICENSE" file for legal information.
|
||||||
|
;
|
||||||
|
; Character specification table for some common targets.
|
||||||
|
;
|
||||||
|
|
||||||
|
.include "ctypetable.inc"
|
||||||
|
.export __ctypeidx
|
||||||
|
|
||||||
|
; The tables are readonly, put them into the rodata segment
|
||||||
|
|
||||||
|
.rodata
|
||||||
|
|
||||||
|
__ctypeidx:
|
||||||
|
ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 0/00 ___ctrl_@___, 1/01 ___ctrl_A___
|
||||||
|
ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 2/02 ___ctrl_B___, 3/03 ___ctrl_C___
|
||||||
|
ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 4/04 ___ctrl_D___, 5/05 ___ctrl_E___
|
||||||
|
ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 6/06 ___ctrl_F___, 7/07 ___ctrl_G___
|
||||||
|
ct_mix CT_CTRL_IDX, CT_CTRL_WS_SPACETAB_IDX ; 8/08 ___ctrl_H___, 9/09 ___ctrl_I___
|
||||||
|
ct_mix CT_CTRL_WS_IDX, CT_CTRL_WS_IDX ; 10/0a ___ctrl_J___, 11/0b ___ctrl_K___
|
||||||
|
ct_mix CT_CTRL_WS_IDX, CT_CTRL_WS_IDX ; 12/0c ___ctrl_L___, 13/0d ___ctrl_M___
|
||||||
|
ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 14/0e ___ctrl_N___, 15/0f ___ctrl_O___
|
||||||
|
ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 16/10 ___ctrl_P___, 17/11 ___ctrl_Q___
|
||||||
|
ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 18/12 ___ctrl_R___, 19/13 ___ctrl_S___
|
||||||
|
ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 20/14 ___ctrl_T___, 21/15 ___ctrl_U___
|
||||||
|
ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 22/16 ___ctrl_V___, 23/17 ___ctrl_W___
|
||||||
|
ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 24/18 ___ctrl_X___, 25/19 ___ctrl_Y___
|
||||||
|
ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 26/1a ___ctrl_Z___, 27/1b ___ctrl_[___
|
||||||
|
ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 28/1c ___ctrl_\___, 29/1d ___ctrl_]___
|
||||||
|
ct_mix CT_CTRL_IDX, CT_CTRL_IDX ; 30/1e ___ctrl_^___, 31/1f ___ctrl_____
|
||||||
|
|
||||||
|
ct_mix CT_SPACE_SPACETAB_IDX, CT_NONE_IDX ; 32/20 ___SPACE___, 33/21 _____!_____
|
||||||
|
ct_mix CT_NONE_IDX, CT_NONE_IDX ; 34/22 _____"_____, 35/23 _____#_____
|
||||||
|
ct_mix CT_NONE_IDX, CT_NONE_IDX ; 36/24 _____$_____, 37/25 _____%_____
|
||||||
|
ct_mix CT_NONE_IDX, CT_NONE_IDX ; 38/26 _____&_____, 39/27 _____'_____
|
||||||
|
ct_mix CT_NONE_IDX, CT_NONE_IDX ; 40/28 _____(_____, 41/29 _____)_____
|
||||||
|
ct_mix CT_NONE_IDX, CT_NONE_IDX ; 42/2a _____*_____, 43/2b _____+_____
|
||||||
|
ct_mix CT_NONE_IDX, CT_NONE_IDX ; 44/2c _____,_____, 45/2d _____-_____
|
||||||
|
ct_mix CT_NONE_IDX, CT_NONE_IDX ; 46/2e _____._____, 47/2f _____/_____
|
||||||
|
ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 48/30 _____0_____, 49/31 _____1_____
|
||||||
|
ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 50/32 _____2_____, 51/33 _____3_____
|
||||||
|
ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 52/34 _____4_____, 53/35 _____5_____
|
||||||
|
ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 54/36 _____6_____, 55/37 _____7_____
|
||||||
|
ct_mix CT_DIGIT_XDIGIT_IDX, CT_DIGIT_XDIGIT_IDX ; 56/38 _____8_____, 57/39 _____9_____
|
||||||
|
ct_mix CT_NONE_IDX, CT_NONE_IDX ; 58/3a _____:_____, 59/3b _____;_____
|
||||||
|
ct_mix CT_NONE_IDX, CT_NONE_IDX ; 60/3c _____<_____, 61/3d _____=_____
|
||||||
|
ct_mix CT_NONE_IDX, CT_NONE_IDX ; 62/3e _____>_____, 63/3f _____?_____
|
||||||
|
|
||||||
|
ct_mix CT_NONE_IDX, CT_UPPER_XDIGIT_IDX ; 64/40 _____@_____, 65/41 _____A_____
|
||||||
|
ct_mix CT_UPPER_XDIGIT_IDX, CT_UPPER_XDIGIT_IDX ; 66/42 _____B_____, 67/43 _____C_____
|
||||||
|
ct_mix CT_UPPER_XDIGIT_IDX, CT_UPPER_XDIGIT_IDX ; 68/44 _____D_____, 69/45 _____E_____
|
||||||
|
ct_mix CT_UPPER_XDIGIT_IDX, CT_UPPER_IDX ; 70/46 _____F_____, 71/47 _____G_____
|
||||||
|
ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 72/48 _____H_____, 73/49 _____I_____
|
||||||
|
ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 74/4a _____J_____, 75/4b _____K_____
|
||||||
|
ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 76/4c _____L_____, 77/4d _____M_____
|
||||||
|
ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 78/4e _____N_____, 79/4f _____O_____
|
||||||
|
ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 80/50 _____P_____, 81/51 _____Q_____
|
||||||
|
ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 82/52 _____R_____, 83/53 _____S_____
|
||||||
|
ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 84/54 _____T_____, 85/55 _____U_____
|
||||||
|
ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 86/56 _____V_____, 87/57 _____W_____
|
||||||
|
ct_mix CT_UPPER_IDX, CT_UPPER_IDX ; 88/58 _____X_____, 89/59 _____Y_____
|
||||||
|
ct_mix CT_UPPER_IDX, CT_NONE_IDX ; 90/5a _____Z_____, 91/5b _____[_____
|
||||||
|
ct_mix CT_NONE_IDX, CT_NONE_IDX ; 92/5c _____\_____, 93/5d _____]_____
|
||||||
|
ct_mix CT_NONE_IDX, CT_NONE_IDX ; 94/5e _____^_____, 95/5f _UNDERLINE_
|
||||||
|
|
||||||
|
ct_mix CT_NONE_IDX, CT_LOWER_XDIGIT_IDX ; 96/60 ___grave___, 97/61 _____a_____
|
||||||
|
ct_mix CT_LOWER_XDIGIT_IDX, CT_LOWER_XDIGIT_IDX ; 98/62 _____b_____, 99/63 _____c_____
|
||||||
|
ct_mix CT_LOWER_XDIGIT_IDX, CT_LOWER_XDIGIT_IDX ; 100/64 _____d_____, 101/65 _____e_____
|
||||||
|
ct_mix CT_LOWER_XDIGIT_IDX, CT_LOWER_IDX ; 102/66 _____f_____, 103/67 _____g_____
|
||||||
|
ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 104/68 _____h_____, 105/69 _____i_____
|
||||||
|
ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 106/6a _____j_____, 107/6b _____k_____
|
||||||
|
ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 108/6c _____l_____, 109/6d _____m_____
|
||||||
|
ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 110/6e _____n_____, 111/6f _____o_____
|
||||||
|
ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 112/70 _____p_____, 113/71 _____q_____
|
||||||
|
ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 114/72 _____r_____, 115/73 _____s_____
|
||||||
|
ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 116/74 _____t_____, 117/75 _____u_____
|
||||||
|
ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 118/76 _____v_____, 119/77 _____w_____
|
||||||
|
ct_mix CT_LOWER_IDX, CT_LOWER_IDX ; 120/78 _____x_____, 121/79 _____y_____
|
||||||
|
ct_mix CT_LOWER_IDX, CT_NONE_IDX ; 122/7a _____z_____, 123/7b _____{_____
|
||||||
|
ct_mix CT_NONE_IDX, CT_NONE_IDX ; 124/7c _____|_____, 125/7d _____}_____
|
||||||
|
ct_mix CT_NONE_IDX, CT_WS_IDX ; 126/7e _____~_____, 127/7f ____DEL____
|
||||||
|
|
||||||
|
.repeat 64
|
||||||
|
ct_mix CT_NONE_IDX, CT_NONE_IDX ; 128-255
|
||||||
|
.endrepeat
|
||||||
48
asminc/ctypetable.inc
Normal file
48
asminc/ctypetable.inc
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
; ctypetable.inc
|
||||||
|
;
|
||||||
|
; This file is part of
|
||||||
|
; cc65 - a freeware C compiler for 6502 based systems
|
||||||
|
;
|
||||||
|
; https://cc65.github.io
|
||||||
|
;
|
||||||
|
; See "LICENSE" file for legal information.
|
||||||
|
;
|
||||||
|
; Data covering all possible combinations of character flags for target specific definition
|
||||||
|
;
|
||||||
|
|
||||||
|
.include "ctype.inc"
|
||||||
|
.export __ctype
|
||||||
|
|
||||||
|
; Table definition covering all possible ctype combinations
|
||||||
|
|
||||||
|
.rodata
|
||||||
|
__ctype:
|
||||||
|
ct_none: .byte CT_NONE
|
||||||
|
ct_lower: .byte CT_LOWER
|
||||||
|
ct_upper: .byte CT_UPPER
|
||||||
|
ct_digit_xdigit: .byte CT_DIGIT | CT_XDIGIT
|
||||||
|
ct_lower_xdigit: .byte CT_LOWER | CT_XDIGIT
|
||||||
|
ct_upper_xdigit: .byte CT_UPPER | CT_XDIGIT
|
||||||
|
ct_ctrl: .byte CT_CTRL
|
||||||
|
ct_ws: .byte CT_OTHER_WS
|
||||||
|
ct_ctrl_ws: .byte CT_CTRL | CT_OTHER_WS
|
||||||
|
ct_space_spacetab: .byte CT_SPACE | CT_SPACE_TAB
|
||||||
|
ct_ctrl_ws_spacetab: .byte CT_CTRL | CT_OTHER_WS | CT_SPACE_TAB
|
||||||
|
|
||||||
|
; build indices out of the table above:
|
||||||
|
|
||||||
|
CT_NONE_IDX = ct_none - __ctype
|
||||||
|
CT_LOWER_IDX = ct_lower - __ctype
|
||||||
|
CT_UPPER_IDX = ct_upper - __ctype
|
||||||
|
CT_DIGIT_XDIGIT_IDX = ct_digit_xdigit - __ctype
|
||||||
|
CT_LOWER_XDIGIT_IDX = ct_lower_xdigit - __ctype
|
||||||
|
CT_UPPER_XDIGIT_IDX = ct_upper_xdigit - __ctype
|
||||||
|
CT_CTRL_IDX = ct_ctrl - __ctype
|
||||||
|
CT_WS_IDX = ct_ws - __ctype
|
||||||
|
CT_CTRL_WS_IDX = ct_ctrl_ws - __ctype
|
||||||
|
CT_SPACE_SPACETAB_IDX = ct_space_spacetab - __ctype
|
||||||
|
CT_CTRL_WS_SPACETAB_IDX = ct_ctrl_ws_spacetab - __ctype
|
||||||
|
|
||||||
|
.macro ct_mix lower, upper
|
||||||
|
.byte ((lower) & $0F) | ((upper) << 4)
|
||||||
|
.endmacro
|
||||||
719
asminc/cx16.inc
719
asminc/cx16.inc
@@ -1,5 +1,5 @@
|
|||||||
;
|
;
|
||||||
; CX16 definitions
|
; CX16 r39 definitions
|
||||||
;
|
;
|
||||||
|
|
||||||
; ---------------------------------------------------------------------------
|
; ---------------------------------------------------------------------------
|
||||||
@@ -10,14 +10,14 @@
|
|||||||
WHITE
|
WHITE
|
||||||
RED
|
RED
|
||||||
CYAN
|
CYAN
|
||||||
VIOLET
|
PURPLE
|
||||||
PURPLE = VIOLET
|
|
||||||
GREEN
|
GREEN
|
||||||
BLUE
|
BLUE
|
||||||
YELLOW
|
YELLOW
|
||||||
ORANGE
|
ORANGE
|
||||||
BROWN
|
BROWN
|
||||||
LIGHTRED
|
PINK
|
||||||
|
LIGHTRED = PINK
|
||||||
GRAY1
|
GRAY1
|
||||||
GRAY2
|
GRAY2
|
||||||
LIGHTGREEN
|
LIGHTGREEN
|
||||||
@@ -25,61 +25,241 @@
|
|||||||
GRAY3
|
GRAY3
|
||||||
.endenum
|
.endenum
|
||||||
|
|
||||||
; Special keys
|
; Special characters
|
||||||
.enum KEY
|
.enum CH
|
||||||
F1 = $85
|
COLOR_SWAP = $01
|
||||||
F3
|
STOP = $03
|
||||||
F5
|
UNDERLINE
|
||||||
F7
|
WHITE
|
||||||
F2
|
BOLD
|
||||||
F4
|
BELL
|
||||||
F6
|
BACKSPACE
|
||||||
F8
|
TAB
|
||||||
F9 = $10
|
LINEFEED
|
||||||
F10 = $15
|
ITALIC
|
||||||
F11
|
OUTLINE
|
||||||
F12
|
ENTER
|
||||||
|
FONT_LOWER
|
||||||
|
FONT_ISO
|
||||||
|
F9
|
||||||
|
CURS_DOWN
|
||||||
|
REVERSE
|
||||||
|
HOME
|
||||||
|
DEL
|
||||||
|
F10
|
||||||
|
F11
|
||||||
|
F12
|
||||||
|
SHIFT_TAB
|
||||||
|
RED = $1C
|
||||||
|
CURS_RIGHT
|
||||||
|
GREEN
|
||||||
|
BLUE
|
||||||
|
LIRA = $5C
|
||||||
|
ORANGE = $81
|
||||||
|
RUN = $83
|
||||||
|
HELP
|
||||||
|
F1
|
||||||
|
F3
|
||||||
|
F5
|
||||||
|
F7
|
||||||
|
F2
|
||||||
|
F4
|
||||||
|
F6
|
||||||
|
F8
|
||||||
|
SHIFT_ENTER
|
||||||
|
FONT_UPPER
|
||||||
|
FONT_PET
|
||||||
|
BLACK
|
||||||
|
CURS_UP
|
||||||
|
ATTR_CLEAR
|
||||||
|
SCRN_CLEAR
|
||||||
|
INS
|
||||||
|
BROWN
|
||||||
|
PINK
|
||||||
|
LIGHTRED = PINK
|
||||||
|
GRAY1
|
||||||
|
GRAY2
|
||||||
|
LIGHTGREEN
|
||||||
|
LIGHTBLUE
|
||||||
|
GRAY3
|
||||||
|
PURPLE
|
||||||
|
CURS_LEFT
|
||||||
|
YELLOW
|
||||||
|
CYAN
|
||||||
|
SHIFT_SPACE
|
||||||
|
LTEE = $AB
|
||||||
|
LLCORNER = $AD
|
||||||
|
URCORNER
|
||||||
|
ULCORNER = $B0
|
||||||
|
BTEE
|
||||||
|
TTEE
|
||||||
|
RTEE
|
||||||
|
LRCORNER = $BD
|
||||||
|
HLINE = $C0
|
||||||
|
CROSS = $DB
|
||||||
|
VLINE = $DD
|
||||||
|
PI
|
||||||
.endenum
|
.endenum
|
||||||
|
|
||||||
; ---------------------------------------------------------------------------
|
; ---------------------------------------------------------------------------
|
||||||
; Zero page
|
; Zero page
|
||||||
|
|
||||||
; BASIC
|
; Banking registers
|
||||||
VARTAB := $2D ; Pointer to start of BASIC variables
|
RAM_BANK := $00
|
||||||
MEMSIZE := $37 ; Pointer to highest BASIC RAM location (+1)
|
ROM_BANK := $01
|
||||||
TXTPTR := $7A ; Pointer into BASIC source code
|
|
||||||
|
; GEOS and graphics pseudo-registers
|
||||||
|
.struct gREG
|
||||||
|
.org $02
|
||||||
|
.union
|
||||||
|
r0 .word
|
||||||
|
.struct
|
||||||
|
r0L .byte
|
||||||
|
r0H .byte
|
||||||
|
.endstruct
|
||||||
|
.endunion
|
||||||
|
.union
|
||||||
|
r1 .word
|
||||||
|
.struct
|
||||||
|
r1L .byte
|
||||||
|
r1H .byte
|
||||||
|
.endstruct
|
||||||
|
.endunion
|
||||||
|
.union
|
||||||
|
r2 .word
|
||||||
|
.struct
|
||||||
|
r2L .byte
|
||||||
|
r2H .byte
|
||||||
|
.endstruct
|
||||||
|
.endunion
|
||||||
|
.union
|
||||||
|
r3 .word
|
||||||
|
.struct
|
||||||
|
r3L .byte
|
||||||
|
r3H .byte
|
||||||
|
.endstruct
|
||||||
|
.endunion
|
||||||
|
.union
|
||||||
|
r4 .word
|
||||||
|
.struct
|
||||||
|
r4L .byte
|
||||||
|
r4H .byte
|
||||||
|
.endstruct
|
||||||
|
.endunion
|
||||||
|
.union
|
||||||
|
r5 .word
|
||||||
|
.struct
|
||||||
|
r5L .byte
|
||||||
|
r5H .byte
|
||||||
|
.endstruct
|
||||||
|
.endunion
|
||||||
|
.union
|
||||||
|
r6 .word
|
||||||
|
.struct
|
||||||
|
r6L .byte
|
||||||
|
r6H .byte
|
||||||
|
.endstruct
|
||||||
|
.endunion
|
||||||
|
.union
|
||||||
|
r7 .word
|
||||||
|
.struct
|
||||||
|
r7L .byte
|
||||||
|
r7H .byte
|
||||||
|
.endstruct
|
||||||
|
.endunion
|
||||||
|
.union
|
||||||
|
r8 .word
|
||||||
|
.struct
|
||||||
|
r8L .byte
|
||||||
|
r8H .byte
|
||||||
|
.endstruct
|
||||||
|
.endunion
|
||||||
|
.union
|
||||||
|
r9 .word
|
||||||
|
.struct
|
||||||
|
r9L .byte
|
||||||
|
r9H .byte
|
||||||
|
.endstruct
|
||||||
|
.endunion
|
||||||
|
.union
|
||||||
|
r10 .word
|
||||||
|
.struct
|
||||||
|
r10L .byte
|
||||||
|
r10H .byte
|
||||||
|
.endstruct
|
||||||
|
.endunion
|
||||||
|
.union
|
||||||
|
r11 .word
|
||||||
|
.struct
|
||||||
|
r11L .byte
|
||||||
|
r11H .byte
|
||||||
|
.endstruct
|
||||||
|
.endunion
|
||||||
|
.union
|
||||||
|
r12 .word
|
||||||
|
.struct
|
||||||
|
r12L .byte
|
||||||
|
r12H .byte
|
||||||
|
.endstruct
|
||||||
|
.endunion
|
||||||
|
.union
|
||||||
|
r13 .word
|
||||||
|
.struct
|
||||||
|
r13L .byte
|
||||||
|
r13H .byte
|
||||||
|
.endstruct
|
||||||
|
.endunion
|
||||||
|
.union
|
||||||
|
r14 .word
|
||||||
|
.struct
|
||||||
|
r14L .byte
|
||||||
|
r14H .byte
|
||||||
|
.endstruct
|
||||||
|
.endunion
|
||||||
|
.union
|
||||||
|
r15 .word
|
||||||
|
.struct
|
||||||
|
r15L .byte
|
||||||
|
r15H .byte
|
||||||
|
.endstruct
|
||||||
|
.endunion
|
||||||
|
.endstruct
|
||||||
|
|
||||||
; Kernal
|
; Kernal
|
||||||
IN_DEV := $99 ; Current input device number
|
KTEMP2 := $80 ; 2 bytes for temporary storage
|
||||||
OUT_DEV := $9A ; Current output device number
|
IMPARM := $82 ; Pointer for PRIMM function
|
||||||
IMPARM := $9B ; Pointer for PRIMM function
|
FNAM := $8A ; Pointer to filename
|
||||||
TIME := $A0 ; 60 Hz. clock
|
|
||||||
FNAM_LEN := $B7 ; Length of filename
|
; BASIC
|
||||||
SECADR := $B9 ; Secondary address
|
TXTPTR := $EE ; Pointer into BASIC source code
|
||||||
DEVNUM := $BA ; Device number
|
|
||||||
FNAM := $BB ; Pointer to filename
|
|
||||||
KEY_COUNT := $C6 ; Number of keys in input buffer
|
|
||||||
RVS := $C7 ; Reverse flag
|
|
||||||
CURS_FLAG := $CC ; 1 = cursor off
|
|
||||||
CURS_BLINK := $CD ; Blink counter
|
|
||||||
CURS_CHAR := $CE ; Character under the cursor
|
|
||||||
CURS_STATE := $CF ; Cursor blink state
|
|
||||||
SCREEN_PTR := $D1 ; Pointer to current row on text screen (16 bits)
|
|
||||||
CURS_X := $D3 ; Cursor column
|
|
||||||
CURS_Y := $D6 ; Cursor row
|
|
||||||
LLEN := $D9 ; Line length
|
|
||||||
NLINES := $DA ; Number of screen lines
|
|
||||||
JOY1 := $EF ; 3 bytes of NES/SNES gamepad data
|
|
||||||
JOY2 := $F2
|
|
||||||
FREKZP := $FB ; Five unused bytes
|
|
||||||
|
|
||||||
; Page two
|
; Page two
|
||||||
|
|
||||||
BASIC_BUF := $200 ; Location of command-line
|
BASIC_BUF := $0200 ; Location of command-line
|
||||||
BASIC_BUF_LEN = 89 ; Maximum length of command-line
|
BASIC_BUF_LEN = 81 ; Maximum length of command-line
|
||||||
|
|
||||||
CHARCOLOR := $286
|
SCREEN_PTR := $0262 ; Pointer to current row on text screen (16 bits)
|
||||||
CURS_COLOR := $287 ; Color under the cursor
|
STATUS := $0287 ; Status from previous I/O operation
|
||||||
|
IN_DEV := $028B ; Current input device number
|
||||||
|
OUT_DEV := $028C ; Current output device number
|
||||||
|
FNAM_LEN := $028F ; Length of filename
|
||||||
|
SECADR := $0291 ; Secondary address
|
||||||
|
DEVNUM := $0292 ; Device number
|
||||||
|
CURS_COLOR := $0373 ; Color under the cursor
|
||||||
|
CHARCOLOR := $0376 ; Cursor's color nybbles (high: background, low: foreground)
|
||||||
|
RVS := $0377 ; Reverse flag
|
||||||
|
CURS_FLAG := $037B ; 1 = cursor off
|
||||||
|
CURS_BLINK := $037C ; Blink counter
|
||||||
|
CURS_CHAR := $037D ; Character under the cursor
|
||||||
|
CURS_STATE := $037E ; Cursor blink state
|
||||||
|
CURS_X := $0380 ; Cursor column
|
||||||
|
CURS_Y := $0383 ; Cursor row
|
||||||
|
LLEN := $0386 ; Line length
|
||||||
|
NLINES := $0387 ; Number of screen lines
|
||||||
|
|
||||||
|
; BASIC
|
||||||
|
VARTAB := $03E1 ; Pointer to start of BASIC variables
|
||||||
|
MEMSIZE := $0259 ; Pointer to highest BASIC RAM location (+1)
|
||||||
|
|
||||||
; ---------------------------------------------------------------------------
|
; ---------------------------------------------------------------------------
|
||||||
; Vector and other locations
|
; Vector and other locations
|
||||||
@@ -91,183 +271,11 @@ NMIVec := $0318
|
|||||||
; ---------------------------------------------------------------------------
|
; ---------------------------------------------------------------------------
|
||||||
; I/O locations
|
; I/O locations
|
||||||
|
|
||||||
; Video Enhanced Retro Adapter
|
; 65C22 Versatile Interface Adapter
|
||||||
; Has audio, SPI, and UART.
|
|
||||||
.scope VERA
|
|
||||||
; External registers
|
|
||||||
.struct
|
|
||||||
.org $9F20
|
|
||||||
ADDR .faraddr ; Address for data port access
|
|
||||||
DATA0 .byte ; First data port
|
|
||||||
DATA1 .byte ; Second data port
|
|
||||||
CTRL .byte ; Control register
|
|
||||||
IRQ_EN .byte ; Interrupt enable bits
|
|
||||||
IRQ_FLAGS .byte ; Interrupt flags
|
|
||||||
.endstruct
|
|
||||||
.enum ; Address automatic increment amounts
|
|
||||||
INC0 = 0 << 4
|
|
||||||
INC1 = 1 << 4
|
|
||||||
INC2 = 2 << 4
|
|
||||||
INC4 = 3 << 4
|
|
||||||
INC8 = 4 << 4
|
|
||||||
INC16 = 5 << 4
|
|
||||||
INC32 = 6 << 4
|
|
||||||
INC64 = 7 << 4
|
|
||||||
INC128 = 8 << 4
|
|
||||||
INC256 = 9 << 4
|
|
||||||
INC512 = 10 << 4
|
|
||||||
INC1024 = 11 << 4
|
|
||||||
INC2048 = 12 << 4
|
|
||||||
INC4096 = 13 << 4
|
|
||||||
INC8192 = 14 << 4
|
|
||||||
INC16384 = 15 << 4
|
|
||||||
.endenum
|
|
||||||
; Internal RAM and registers
|
|
||||||
VRAM := $000000
|
|
||||||
.scope COMPOSER ; Display composer
|
|
||||||
.struct
|
|
||||||
.org $0F0000
|
|
||||||
VIDEO .byte
|
|
||||||
HSCALE .byte
|
|
||||||
VSCALE .byte
|
|
||||||
FRAME .byte
|
|
||||||
HSTART_LO .byte
|
|
||||||
HSTOP_LO .byte
|
|
||||||
VSTART_LO .byte
|
|
||||||
VSTOP_LO .byte
|
|
||||||
STRTSTOP_HI .byte
|
|
||||||
IRQ_LINE .word
|
|
||||||
.endstruct
|
|
||||||
.enum MODE ; Output mode
|
|
||||||
DISABLE = 0
|
|
||||||
VGA
|
|
||||||
NTSC
|
|
||||||
RGB ; Interlaced, composite sync
|
|
||||||
.endenum
|
|
||||||
.enum
|
|
||||||
ENABLE_COLOR = 0 << 2
|
|
||||||
DISABLE_COLOR = 1 << 2 ; NTSC monochrome
|
|
||||||
.endenum
|
|
||||||
.endscope
|
|
||||||
PALETTE := $0F1000
|
|
||||||
.struct L0 ; Layer 0 registers
|
|
||||||
.org $0F2000
|
|
||||||
CTRL0 .byte ; Display mode control
|
|
||||||
CTRL1 .byte ; Geometry control
|
|
||||||
MAP_BASE .addr
|
|
||||||
TILE_BASE .addr
|
|
||||||
HSCROLL .word ; Horizontal scroll
|
|
||||||
VSCROLL .word ; Vertical scroll
|
|
||||||
.endstruct
|
|
||||||
.struct L1 ; Layer 1 registers (same as layer 0)
|
|
||||||
.org $0F3000
|
|
||||||
CTRL0 .byte
|
|
||||||
CTRL1 .byte
|
|
||||||
MAP_BASE .addr
|
|
||||||
TILE_BASE .addr
|
|
||||||
HSCROLL .word
|
|
||||||
VSCROLL .word
|
|
||||||
.endstruct
|
|
||||||
.enum MAP ; Map geometry
|
|
||||||
WIDTH32 = 0
|
|
||||||
WIDTH64
|
|
||||||
WIDTH128
|
|
||||||
WIDTH256
|
|
||||||
HEIGHT32 = 0 << 2
|
|
||||||
HEIGHT64 = 1 << 2
|
|
||||||
HEIGHT128 = 2 << 2
|
|
||||||
HEIGHT256 = 3 << 2
|
|
||||||
.endenum
|
|
||||||
.scope TILE ; Tile geometry
|
|
||||||
.enum
|
|
||||||
WIDTH8 = 0 << 4
|
|
||||||
WIDTH16 = 1 << 4
|
|
||||||
WIDTH320 = WIDTH8
|
|
||||||
WIDTH640 = WIDTH16
|
|
||||||
HEIGHT8 = 0 << 5
|
|
||||||
HEIGHT16 = 1 << 5
|
|
||||||
.endenum
|
|
||||||
.enum FLIP
|
|
||||||
NONE = 0 << 2
|
|
||||||
HORIZ = 1 << 2
|
|
||||||
VERT = 2 << 2
|
|
||||||
BOTH = 3 << 2
|
|
||||||
.endenum
|
|
||||||
.endscope
|
|
||||||
.enum DMODE ; Display modes
|
|
||||||
TEXT16 = 0 << 5
|
|
||||||
TEXT256 = 1 << 5
|
|
||||||
TILE4 = 2 << 5
|
|
||||||
TILE16 = 3 << 5
|
|
||||||
TILE256 = 4 << 5
|
|
||||||
BITMAP4 = 5 << 5
|
|
||||||
BITMAP16 = 6 << 5
|
|
||||||
BITMAP256 = 7 << 5
|
|
||||||
.endenum
|
|
||||||
.scope SPRITE
|
|
||||||
.struct
|
|
||||||
.org $0F4000
|
|
||||||
CTRL .byte ; Enables sprites
|
|
||||||
COLLISION .byte
|
|
||||||
.endstruct
|
|
||||||
.enum FLIP
|
|
||||||
NONE = 0
|
|
||||||
HORIZ
|
|
||||||
VERT
|
|
||||||
BOTH
|
|
||||||
.endenum
|
|
||||||
.enum ; Sprite geometry
|
|
||||||
WIDTH8 = 0 << 4
|
|
||||||
WIDTH16 = 1 << 4
|
|
||||||
WIDTH32 = 2 << 4
|
|
||||||
WIDTH64 = 3 << 4
|
|
||||||
HEIGHT8 = 0 << 6
|
|
||||||
HEIGHT16 = 1 << 6
|
|
||||||
HEIGHT32 = 2 << 6
|
|
||||||
HEIGHT64 = 3 << 6
|
|
||||||
COLORS16 = 0 << 7
|
|
||||||
COLORS256 = 1 << 7
|
|
||||||
.endenum
|
|
||||||
.enum DEPTH
|
|
||||||
DISABLE = 0 << 2
|
|
||||||
CANVAS = 1 << 2
|
|
||||||
LAYER0 = 2 << 2
|
|
||||||
LAYER1 = 3 << 2
|
|
||||||
.endenum
|
|
||||||
ATTRIB := $0F5000 ; Sprite attributes
|
|
||||||
.endscope
|
|
||||||
AUDIO := $0F6000
|
|
||||||
.scope SPI
|
|
||||||
.struct
|
|
||||||
.org $0F7000
|
|
||||||
DATA .byte
|
|
||||||
CONTROL .byte
|
|
||||||
.endstruct
|
|
||||||
.enum
|
|
||||||
DESELECT = 0
|
|
||||||
SELECT
|
|
||||||
BUSY_MASK = 1 << 1
|
|
||||||
.endenum
|
|
||||||
.endscope
|
|
||||||
.scope UART ; Universal Asyncronous Receiver Transmitter
|
|
||||||
.struct
|
|
||||||
.org $0F8000
|
|
||||||
DATA .byte
|
|
||||||
STATUS .byte
|
|
||||||
BPS_DIV .word
|
|
||||||
.endstruct
|
|
||||||
.enum MASK
|
|
||||||
RECEIVE = 1 << 0
|
|
||||||
TRANSMIT = 1 << 1
|
|
||||||
.endenum
|
|
||||||
.endscope
|
|
||||||
.endscope
|
|
||||||
|
|
||||||
; 65c22
|
|
||||||
.struct VIA1 ; Versatile Interface Adapter
|
.struct VIA1 ; Versatile Interface Adapter
|
||||||
.org $9F60
|
.org $9F00
|
||||||
PRB .byte ; ROM bank, IEC (Port Register B)
|
PRB .byte ; mouse, LED, VIC bus (Port Register B)
|
||||||
PRA .byte ; RAM bank (Port Register A)
|
PRA .byte ; keyboard, controllers (Port Register A)
|
||||||
DDRB .byte ; (Data Direction Register B)
|
DDRB .byte ; (Data Direction Register B)
|
||||||
DDRA .byte ; (Data Direction Register A)
|
DDRA .byte ; (Data Direction Register A)
|
||||||
T1 .word ; (Timer 1)
|
T1 .word ; (Timer 1)
|
||||||
@@ -278,14 +286,14 @@ NMIVec := $0318
|
|||||||
PCR .byte ; (Peripheral Control Register)
|
PCR .byte ; (Peripheral Control Register)
|
||||||
IFR .byte ; (Interrupt Flags Register)
|
IFR .byte ; (Interrupt Flags Register)
|
||||||
IER .byte ; (Interrupt Enable Register)
|
IER .byte ; (Interrupt Enable Register)
|
||||||
PRA2 .byte ; RAM bank (Port Register A without handshaking)
|
PRA2 .byte ; keyboard, controllers (PRA without handshake)
|
||||||
.endstruct
|
.endstruct
|
||||||
|
|
||||||
; 65c22
|
; 65C22 Versatile Interface Adapter
|
||||||
.struct VIA2
|
.struct VIA2
|
||||||
.org $9F70
|
.org $9F10
|
||||||
PRB .byte
|
PRB .byte
|
||||||
PRA .byte ; NES controller communication
|
PRA .byte
|
||||||
DDRB .byte
|
DDRB .byte
|
||||||
DDRA .byte
|
DDRA .byte
|
||||||
T1 .word
|
T1 .word
|
||||||
@@ -299,7 +307,243 @@ NMIVec := $0318
|
|||||||
PRA2 .byte
|
PRA2 .byte
|
||||||
.endstruct
|
.endstruct
|
||||||
|
|
||||||
; Real-Time Clock
|
; Video Enhanced Retro Adapter
|
||||||
|
; Has audio and SPI.
|
||||||
|
.scope VERA
|
||||||
|
|
||||||
|
; External registers
|
||||||
|
|
||||||
|
.struct
|
||||||
|
.org $9F20
|
||||||
|
ADDR .faraddr ; Address for data port access
|
||||||
|
DATA0 .byte ; First data port
|
||||||
|
DATA1 .byte ; Second data port
|
||||||
|
CTRL .byte ; Control register
|
||||||
|
IRQ_EN .byte ; Interrupt enable bits
|
||||||
|
IRQ_FLAGS .byte ; Interrupt flags
|
||||||
|
IRQ_RASTER .byte ; Line where IRQ will occur
|
||||||
|
.endstruct
|
||||||
|
.enum ; Address automatic increment amounts
|
||||||
|
DEC0 = (($00 << 1) | $01) << 3
|
||||||
|
DEC1 = (($01 << 1) | $01) << 3
|
||||||
|
DEC2 = (($02 << 1) | $01) << 3
|
||||||
|
DEC4 = (($03 << 1) | $01) << 3
|
||||||
|
DEC8 = (($04 << 1) | $01) << 3
|
||||||
|
DEC16 = (($05 << 1) | $01) << 3
|
||||||
|
DEC32 = (($06 << 1) | $01) << 3
|
||||||
|
DEC64 = (($07 << 1) | $01) << 3
|
||||||
|
DEC128 = (($08 << 1) | $01) << 3
|
||||||
|
DEC256 = (($09 << 1) | $01) << 3
|
||||||
|
DEC512 = (($0A << 1) | $01) << 3
|
||||||
|
DEC40 = (($0B << 1) | $01) << 3
|
||||||
|
DEC80 = (($0C << 1) | $01) << 3
|
||||||
|
DEC160 = (($0D << 1) | $01) << 3
|
||||||
|
DEC320 = (($0E << 1) | $01) << 3
|
||||||
|
DEC640 = (($0F << 1) | $01) << 3
|
||||||
|
INC0 = (($00 << 1) | $00) << 3
|
||||||
|
INC1 = (($01 << 1) | $00) << 3
|
||||||
|
INC2 = (($02 << 1) | $00) << 3
|
||||||
|
INC4 = (($03 << 1) | $00) << 3
|
||||||
|
INC8 = (($04 << 1) | $00) << 3
|
||||||
|
INC16 = (($05 << 1) | $00) << 3
|
||||||
|
INC32 = (($06 << 1) | $00) << 3
|
||||||
|
INC64 = (($07 << 1) | $00) << 3
|
||||||
|
INC128 = (($08 << 1) | $00) << 3
|
||||||
|
INC256 = (($09 << 1) | $00) << 3
|
||||||
|
INC512 = (($0A << 1) | $00) << 3
|
||||||
|
INC40 = (($0B << 1) | $00) << 3
|
||||||
|
INC80 = (($0C << 1) | $00) << 3
|
||||||
|
INC160 = (($0D << 1) | $00) << 3
|
||||||
|
INC320 = (($0E << 1) | $00) << 3
|
||||||
|
INC640 = (($0F << 1) | $00) << 3
|
||||||
|
.endenum
|
||||||
|
.enum ; Interrupt request flags
|
||||||
|
VERT_SYNC = %00000001
|
||||||
|
RASTER_IRQ = %00000010
|
||||||
|
SPR_COLLIDED = %00000100
|
||||||
|
AUDIO_LOW = %00001000
|
||||||
|
.endenum
|
||||||
|
.scope DISP ; Display controller
|
||||||
|
SELECT1 = %00000010
|
||||||
|
.union
|
||||||
|
.org $9F29
|
||||||
|
.struct
|
||||||
|
; These four registers are visible when the DCSEL flag = %0
|
||||||
|
VIDEO .byte
|
||||||
|
HSCALE .byte
|
||||||
|
VSCALE .byte
|
||||||
|
FRAME .byte
|
||||||
|
.endstruct
|
||||||
|
.struct
|
||||||
|
; These four registers are visible when the DCSEL flag = %1
|
||||||
|
HSTART .byte
|
||||||
|
HSTOP .byte
|
||||||
|
VSTART .byte
|
||||||
|
VSTOP .byte
|
||||||
|
.endstruct
|
||||||
|
.endunion
|
||||||
|
.enum MODE ; Output mode
|
||||||
|
DISABLE = $00
|
||||||
|
VGA
|
||||||
|
NTSC
|
||||||
|
RGB ; Interlaced, composite sync
|
||||||
|
.endenum
|
||||||
|
.enum DISABLE
|
||||||
|
COLOR = %00000100 ; NTSC monochrome
|
||||||
|
.endenum
|
||||||
|
.enum ENABLE
|
||||||
|
LAYER0 = %00010000
|
||||||
|
LAYER1 = %00100000
|
||||||
|
SPRITES = %01000000
|
||||||
|
.endenum
|
||||||
|
.endscope
|
||||||
|
.struct L0 ; Display layer 0
|
||||||
|
.org $9F2D
|
||||||
|
CONFIG .byte
|
||||||
|
MAP_BASE .byte
|
||||||
|
TILE_BASE .byte
|
||||||
|
HSCROLL .word
|
||||||
|
VSCROLL .word
|
||||||
|
.endstruct
|
||||||
|
.struct L1 ; Display layer 1
|
||||||
|
.org $9F34
|
||||||
|
CONFIG .byte
|
||||||
|
MAP_BASE .byte
|
||||||
|
TILE_BASE .byte
|
||||||
|
HSCROLL .word
|
||||||
|
VSCROLL .word
|
||||||
|
.endstruct
|
||||||
|
.enum ; Layer display modes
|
||||||
|
TILE1BPP = %00000000 | $00
|
||||||
|
TILE2BPP
|
||||||
|
TILE4BPP
|
||||||
|
TILE8BPP
|
||||||
|
T256C = %00001000
|
||||||
|
BITMAP1BPP = %00000100 | $00
|
||||||
|
BITMAP2BPP
|
||||||
|
BITMAP4BPP
|
||||||
|
BITMAP8BPP
|
||||||
|
.endenum
|
||||||
|
.enum MAP ; Map geometry
|
||||||
|
WIDTH32 = $00 << 4
|
||||||
|
WIDTH64 = $01 << 4
|
||||||
|
WIDTH128 = $02 << 4
|
||||||
|
WIDTH256 = $03 << 4
|
||||||
|
HEIGHT32 = $00 << 6
|
||||||
|
HEIGHT64 = $01 << 6
|
||||||
|
HEIGHT128 = $02 << 6
|
||||||
|
HEIGHT256 = $03 << 6
|
||||||
|
.endenum
|
||||||
|
.enum TILE ; Tile geometry
|
||||||
|
WIDTH8 = $00
|
||||||
|
WIDTH16 = $01
|
||||||
|
WIDTH320 = WIDTH8
|
||||||
|
WIDTH640 = WIDTH16
|
||||||
|
HEIGHT8 = $00 << 1
|
||||||
|
HEIGHT16 = $01 << 1
|
||||||
|
.endenum
|
||||||
|
.scope PCM ; Pulse-Code Modulator
|
||||||
|
.struct
|
||||||
|
.org $9F3B
|
||||||
|
CTRL .byte
|
||||||
|
RATE .byte
|
||||||
|
DATA .byte
|
||||||
|
.endstruct
|
||||||
|
.enum
|
||||||
|
STEREO = %00010000
|
||||||
|
BITS16 = %00100000
|
||||||
|
RESET = %10000000
|
||||||
|
.endenum
|
||||||
|
.endscope
|
||||||
|
.scope SPI
|
||||||
|
.struct
|
||||||
|
.org $9F3E
|
||||||
|
DATA .byte
|
||||||
|
CTRL .byte
|
||||||
|
.endstruct
|
||||||
|
.enum
|
||||||
|
SELECT = %00000001
|
||||||
|
SLOW = %00000010
|
||||||
|
.endenum
|
||||||
|
.endscope
|
||||||
|
|
||||||
|
; Internal RAM and registers
|
||||||
|
|
||||||
|
.struct
|
||||||
|
.org $000000
|
||||||
|
VRAM .res $020000 ; 128 Kibibytes
|
||||||
|
.endstruct
|
||||||
|
.scope PSG ; Programmable Sound Generator
|
||||||
|
.struct
|
||||||
|
PITCH .word
|
||||||
|
VOL .byte ; Right, left sides; volume
|
||||||
|
WAVEFORM .byte ; Wave shape, pulse width
|
||||||
|
.endstruct
|
||||||
|
LEFT = %01 << 6
|
||||||
|
RIGHT = %10 << 6
|
||||||
|
.enum
|
||||||
|
PULSE = $00 << 6
|
||||||
|
SAWTOOTH = $01 << 6
|
||||||
|
TRIANGLE = $02 << 6
|
||||||
|
NOISE = $03 << 6
|
||||||
|
.endenum
|
||||||
|
.struct
|
||||||
|
.org $01F9C0
|
||||||
|
VOICES .res $10 * 4
|
||||||
|
.endstruct
|
||||||
|
.endscope
|
||||||
|
.struct
|
||||||
|
.org $01FA00
|
||||||
|
PALETTE .word $0100
|
||||||
|
.endstruct
|
||||||
|
.scope SPRITE
|
||||||
|
.struct ; Sprite attributes
|
||||||
|
ADDR .addr ; Address and color mode
|
||||||
|
XX .word ; Co-ordinates
|
||||||
|
YY .word
|
||||||
|
Z_FLIP .byte ; Collision mask, Z-depth, flip bits
|
||||||
|
SIZE_PAL .byte
|
||||||
|
.endstruct
|
||||||
|
.enum FLIP
|
||||||
|
NONE = %00000000
|
||||||
|
HORIZ
|
||||||
|
VERT
|
||||||
|
BOTH
|
||||||
|
.endenum
|
||||||
|
.enum DEPTH
|
||||||
|
DISABLE = $00 << 2
|
||||||
|
CANVAS = $01 << 2
|
||||||
|
LAYER0 = $02 << 2
|
||||||
|
LAYER1 = $03 << 2
|
||||||
|
.endenum
|
||||||
|
.enum ; Sprite geometry
|
||||||
|
WIDTH8 = $00 << 4
|
||||||
|
WIDTH16 = $01 << 4
|
||||||
|
WIDTH32 = $02 << 4
|
||||||
|
WIDTH64 = $03 << 4
|
||||||
|
HEIGHT8 = $00 << 6
|
||||||
|
HEIGHT16 = $01 << 6
|
||||||
|
HEIGHT32 = $02 << 6
|
||||||
|
HEIGHT64 = $03 << 6
|
||||||
|
COLORS16 = $00 << 7
|
||||||
|
COLORS256 = $01 << 7
|
||||||
|
.endenum
|
||||||
|
.endscope
|
||||||
|
.struct
|
||||||
|
.org $01FC00
|
||||||
|
SPRITES .res 128 * 8
|
||||||
|
.endstruct
|
||||||
|
.endscope
|
||||||
|
|
||||||
|
; YM2151 audio chip
|
||||||
|
.struct YM2151
|
||||||
|
.org $9F40
|
||||||
|
ADDR .byte
|
||||||
|
.union
|
||||||
|
DATA .byte
|
||||||
|
STATUS .byte
|
||||||
|
.endunion
|
||||||
|
.endstruct
|
||||||
|
|
||||||
; X16 Emulator device
|
; X16 Emulator device
|
||||||
; This device doesn't exist on the real machine.
|
; This device doesn't exist on the real machine.
|
||||||
@@ -309,9 +553,22 @@ NMIVec := $0318
|
|||||||
VERALOG .byte ; Boolean: log VERA activity
|
VERALOG .byte ; Boolean: log VERA activity
|
||||||
KEYBOARDLOG .byte ; Boolean: log keyboard data
|
KEYBOARDLOG .byte ; Boolean: log keyboard data
|
||||||
ECHO .byte ; Type of echo that's enabled
|
ECHO .byte ; Type of echo that's enabled
|
||||||
SAVEXIT .byte ; Boolean: save on exit
|
SAVEXIT .byte ; Boolean: save machine state on exit
|
||||||
GIFREC .byte ; Method of recording GIF movie
|
GIFREC .byte ; Method of recording GIF movie
|
||||||
.org $9FBD
|
.res 2
|
||||||
|
CYCLECOUNT .dword ; Running count of CPU cycles (Read-Only)
|
||||||
|
.res 1
|
||||||
KEYMAP .byte ; Current keyboard layout number (Read-Only)
|
KEYMAP .byte ; Current keyboard layout number (Read-Only)
|
||||||
DETECT .byte 2 ; If is "16" string, then running on emulator (RO)
|
DETECT .byte 2 ; If is "16" string, then running on emulator (RO)
|
||||||
.endstruct
|
.endstruct
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; Banked RAM and ROM
|
||||||
|
|
||||||
|
TIMER := $A03B ; (bank 0) 60 Hz. timer (3 bytes, big-endian)
|
||||||
|
|
||||||
|
.struct BANK
|
||||||
|
.org $A000
|
||||||
|
RAM .res $2000 ; 8 Kibibyte window into 512 Kibibytes or 2048 Kibibytes
|
||||||
|
ROM .res $4000 ; 16 Kibibyte window into 128 Kibibytes
|
||||||
|
.endstruct
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
;/* */
|
;/* */
|
||||||
;/* */
|
;/* */
|
||||||
;/* (C) 2002-2003 Ullrich von Bassewitz */
|
;/* (C) 2002-2003 Ullrich von Bassewitz */
|
||||||
;/* R<EFBFBD>merstrasse 52 */
|
;/* Roemerstrasse 52 */
|
||||||
;/* D-70794 Filderstadt */
|
;/* D-70794 Filderstadt */
|
||||||
;/* EMail: uz@cc65.org */
|
;/* EMail: uz@cc65.org */
|
||||||
;/* */
|
;/* */
|
||||||
|
|||||||
@@ -4,10 +4,10 @@
|
|||||||
|
|
||||||
; Variables and functions
|
; Variables and functions
|
||||||
|
|
||||||
.global __errno, __oserror
|
.global ___errno, ___oserror
|
||||||
.global __osmaperrno
|
.global ___osmaperrno
|
||||||
.global __seterrno
|
.global ___seterrno
|
||||||
.global __directerrno, __mappederrno
|
.global ___directerrno, ___mappederrno
|
||||||
|
|
||||||
; Error codes, must match the values in the C headers
|
; Error codes, must match the values in the C headers
|
||||||
.enum
|
.enum
|
||||||
|
|||||||
@@ -31,10 +31,8 @@
|
|||||||
|
|
||||||
; bgt - jump if unsigned greater
|
; bgt - jump if unsigned greater
|
||||||
.macro bgt Arg
|
.macro bgt Arg
|
||||||
.local L
|
beq *+4
|
||||||
beq L
|
|
||||||
bcs Arg
|
bcs Arg
|
||||||
L:
|
|
||||||
.endmacro
|
.endmacro
|
||||||
|
|
||||||
; ble - jump if unsigned less or equal
|
; ble - jump if unsigned less or equal
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
;/* */
|
;/* */
|
||||||
;/* */
|
;/* */
|
||||||
;/* (C) 2002-2006, Ullrich von Bassewitz */
|
;/* (C) 2002-2006, Ullrich von Bassewitz */
|
||||||
;/* R<EFBFBD>merstra<EFBFBD>e 52 */
|
;/* Roemerstrasse 52 */
|
||||||
;/* D-70794 Filderstadt */
|
;/* D-70794 Filderstadt */
|
||||||
;/* EMail: uz@cc65.org */
|
;/* EMail: uz@cc65.org */
|
||||||
;/* */
|
;/* */
|
||||||
|
|||||||
31
asminc/kim1.inc
Normal file
31
asminc/kim1.inc
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
;
|
||||||
|
; KIM-1 definitions
|
||||||
|
;
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
RAMSTART := $0200 ; Entry point
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; Monitor Functions
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
OUTCHR := $1EA0 ; Output character
|
||||||
|
INTCHR := $1E5A ; Input character without case conversion
|
||||||
|
DUMPT := $1800 ; Dump memory to tape
|
||||||
|
LOADT := $1873 ; Load memory from tape
|
||||||
|
START := $1C4F ; Enter KIM-1 monitor
|
||||||
|
SCANDS := $1F1F ; Scan 7-segment display
|
||||||
|
KEYIN := $1F40 ; Open up keyboard channel
|
||||||
|
GETKEY := $1F6A ; Return key from keyboard
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; System Memory
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
SAL := $17F5 ; Tape load address low
|
||||||
|
SAH := $17F6 ; Tape load address high
|
||||||
|
EAL := $17F7 ; Tape address end low
|
||||||
|
EAH := $17F8 ; Tape address end high
|
||||||
|
ID := $17F9 ; Tape Identification number
|
||||||
517
asminc/lynx.inc
517
asminc/lynx.inc
@@ -79,19 +79,91 @@ MATHL = $FC6D
|
|||||||
MATHK = $FC6E
|
MATHK = $FC6E
|
||||||
MATHJ = $FC6F
|
MATHJ = $FC6F
|
||||||
|
|
||||||
; Suzy Misc
|
; Suzy sprite engine
|
||||||
|
|
||||||
|
SPRCTL0 = $FC80
|
||||||
|
; Sprite bits-per-pixel definitions
|
||||||
|
BPP_MASK = %11000000 ; Mask for settings bits per pixel
|
||||||
|
BPP_1 = %00000000
|
||||||
|
BPP_2 = %01000000
|
||||||
|
BPP_3 = %10000000
|
||||||
|
BPP_4 = %11000000
|
||||||
|
; More sprite control 0 bit definitions
|
||||||
|
HFLIP = %00100000
|
||||||
|
VFLIP = %00010000
|
||||||
|
; Sprite types - redefined to reflect the reality caused by the shadow error
|
||||||
|
TYPE_SHADOW = %00000111
|
||||||
|
TYPE_XOR = %00000110
|
||||||
|
TYPE_NONCOLL = %00000101 ; Non-colliding
|
||||||
|
TYPE_NORMAL = %00000100
|
||||||
|
TYPE_BOUNDARY = %00000011
|
||||||
|
TYPE_BSHADOW = %00000010 ; Background shadow
|
||||||
|
TYPE_BACKNONCOLL = %00000001 ; Background non-colliding
|
||||||
|
TYPE_BACKGROUND = %00000000
|
||||||
|
|
||||||
SPRCTL0 = $FC80
|
|
||||||
SPRCTL1 = $FC81
|
SPRCTL1 = $FC81
|
||||||
SPRCOLL = $FC82
|
LITERAL = %10000000
|
||||||
SPRINIT = $FC83
|
PACKED = %00000000
|
||||||
SUZYHREV = $FC88
|
ALGO3 = %01000000 ; Broken, do not set this bit!
|
||||||
SUZYSREV = $FC89
|
; Sprite reload mask definitions
|
||||||
SUZYBUSEN = $FC90
|
RELOAD_MASK = %00110000
|
||||||
SPRGO = $FC91
|
RENONE = %00000000 ; Reload nothing
|
||||||
SPRSYS = $FC92
|
REHV = %00010000 ; Reload hsize, vsize
|
||||||
JOYSTICK = $FCB0
|
REHVS = %00100000 ; Reload hsize, vsize, stretch
|
||||||
|
REHVST = %00110000 ; Reload hsize, vsize, stretch, tilt
|
||||||
|
; More sprite control 1 bit definitions
|
||||||
|
REUSEPAL = %00001000
|
||||||
|
SKIP = %00000100
|
||||||
|
DRAWUP = %00000010
|
||||||
|
DRAWLEFT = %00000001
|
||||||
|
|
||||||
|
SPRCOLL = $FC82
|
||||||
|
SPRINIT = $FC83
|
||||||
|
SUZYHREV = $FC88
|
||||||
|
SUZYSREV = $FC89
|
||||||
|
SUZYBUSEN = $FC90
|
||||||
|
|
||||||
|
SPRGO = $FC91
|
||||||
|
; SPRGO bit definitions
|
||||||
|
SPRITE_GO = %00000001 ; sprite process start bit
|
||||||
|
EVER_ON = %00000100 ; everon detector enable
|
||||||
|
|
||||||
|
SPRSYS = $FC92
|
||||||
|
; SPRSYS bit definitions for write operations
|
||||||
|
SIGNMATH = %10000000 ; signed math
|
||||||
|
ACCUMULATE = %01000000 ; accumulate multiplication results
|
||||||
|
NO_COLLIDE = %00100000 ; do not collide with any sprites (also SPRCOLL bit definition)
|
||||||
|
VSTRETCH = %00010000 ; stretch v
|
||||||
|
LEFTHAND = %00001000
|
||||||
|
CLR_UNSAFE = %00000100 ; unsafe access reset
|
||||||
|
SPRITESTOP = %00000010 ; request to stop sprite process
|
||||||
|
; SPRSYS bit definitions for read operations
|
||||||
|
MATHWORKING = %10000000 ; math operation in progress
|
||||||
|
MATHWARNING = %01000000 ; accumulator overflow on multiple or divide by zero
|
||||||
|
MATHCARRY = %00100000 ; last carry bit
|
||||||
|
VSTRETCHING = %00010000
|
||||||
|
LEFTHANDED = %00001000
|
||||||
|
UNSAFE_ACCESS = %00000100 ; unsafe access performed
|
||||||
|
SPRITETOSTOP = %00000010 ; requested to stop
|
||||||
|
SPRITEWORKING = %00000001 ; sprite process is active
|
||||||
|
|
||||||
|
JOYSTICK = $FCB0
|
||||||
|
; JOYSTICK bit definitions
|
||||||
|
JOYPAD_UP = %10000000
|
||||||
|
JOYPAD_DOWN = %01000000
|
||||||
|
JOYPAD_LEFT = %00100000
|
||||||
|
JOYPAD_RIGHT = %00010000
|
||||||
|
BUTTON_OPTION1 = %00001000
|
||||||
|
BUTTON_OPTION2 = %00000100
|
||||||
|
BUTTON_INNER = %00000010
|
||||||
|
BUTTON_OUTER = %00000001
|
||||||
|
|
||||||
SWITCHES = $FCB1
|
SWITCHES = $FCB1
|
||||||
|
; SWITCHES bit definitions
|
||||||
|
CART1_IO_INACTIVE = %00000100
|
||||||
|
CART0_IO_INACTIVE = %00000010
|
||||||
|
BUTTON_PAUSE = %00000001
|
||||||
|
|
||||||
RCART0 = $FCB2
|
RCART0 = $FCB2
|
||||||
RCART1 = $FCB3
|
RCART1 = $FCB3
|
||||||
LEDS = $FCC0
|
LEDS = $FCC0
|
||||||
@@ -99,181 +171,290 @@ PARSTATUS = $FCC2
|
|||||||
PARDATA = $FCC3
|
PARDATA = $FCC3
|
||||||
HOWIE = $FCC4
|
HOWIE = $FCC4
|
||||||
|
|
||||||
|
;
|
||||||
; ***
|
|
||||||
; *** Mikey Addresses
|
; *** Mikey Addresses
|
||||||
; ***
|
; ***
|
||||||
|
|
||||||
; Mikey Timers
|
; Mikey timers
|
||||||
|
|
||||||
TIMER0 = $FD00
|
; Logical timer names
|
||||||
TIMER1 = $FD04
|
TIMER0 = $FD00
|
||||||
TIMER2 = $FD08
|
TIMER1 = $FD04
|
||||||
TIMER3 = $FD0C
|
TIMER2 = $FD08
|
||||||
TIMER4 = $FD10
|
TIMER3 = $FD0C
|
||||||
TIMER5 = $FD14
|
TIMER4 = $FD10
|
||||||
TIMER6 = $FD18
|
TIMER5 = $FD14
|
||||||
TIMER7 = $FD1C
|
TIMER6 = $FD18
|
||||||
HTIMER = $FD00 ; horizontal line timer (timer 0)
|
TIMER7 = $FD1C
|
||||||
VTIMER = $FD08 ; vertical blank timer (timer 2)
|
HTIMER = TIMER0 ; horizontal line timer (timer 0)
|
||||||
STIMER = $FD1C ; sound timer (timer 7)
|
VTIMER = TIMER2 ; vertical blank timer (timer 2)
|
||||||
|
STIMER = TIMER7 ; sound timer (timer 7)
|
||||||
|
|
||||||
HTIMBKUP = $FD00 ; horizontal line timer (timer 0)
|
HTIMBKUP = $FD00 ; horizontal line timer (timer 0)
|
||||||
HTIMCTLA = $FD01
|
HTIMCTLA = $FD01
|
||||||
HTIMCNT = $FD02
|
HTIMCNT = $FD02
|
||||||
HTIMCTLB = $FD03
|
HTIMCTLB = $FD03
|
||||||
VTIMBKUP = $FD08 ; vertical blank timer (timer 2)
|
VTIMBKUP = $FD08 ; vertical blank timer (timer 2)
|
||||||
VTIMCTLA = $FD09
|
VTIMCTLA = $FD09
|
||||||
VTIMCNT = $FD0A
|
VTIMCNT = $FD0A
|
||||||
VTIMCTLB = $FD0B
|
VTIMCTLB = $FD0B
|
||||||
BAUDBKUP = $FD10 ; serial timer (timer 4)
|
BAUDBKUP = $FD10 ; serial timer (timer 4)
|
||||||
STIMBKUP = $FD1C ; sound timer (timer 7)
|
STIMBKUP = $FD1C ; sound timer (timer 7)
|
||||||
STIMCTLA = $FD1D
|
STIMCTLA = $FD1D
|
||||||
STIMCNT = $FD1E
|
STIMCNT = $FD1E
|
||||||
STIMCTLB = $FD1F
|
STIMCTLB = $FD1F
|
||||||
|
|
||||||
TIM0BKUP = $FD00
|
TIM0BKUP = $FD00
|
||||||
TIM0CTLA = $FD01
|
TIM0CTLA = $FD01
|
||||||
TIM0CNT = $FD02
|
TIM0CNT = $FD02
|
||||||
TIM0CTLB = $FD03
|
TIM0CTLB = $FD03
|
||||||
TIM1BKUP = $FD04
|
TIM1BKUP = $FD04
|
||||||
TIM1CTLA = $FD05
|
TIM1CTLA = $FD05
|
||||||
TIM1CNT = $FD06
|
TIM1CNT = $FD06
|
||||||
TIM1CTLB = $FD07
|
TIM1CTLB = $FD07
|
||||||
TIM2BKUP = $FD08
|
TIM2BKUP = $FD08
|
||||||
TIM2CTLA = $FD09
|
TIM2CTLA = $FD09
|
||||||
TIM2CNT = $FD0A
|
TIM2CNT = $FD0A
|
||||||
TIM2CTLB = $FD0B
|
TIM2CTLB = $FD0B
|
||||||
TIM3BKUP = $FD0C
|
TIM3BKUP = $FD0C
|
||||||
TIM3CTLA = $FD0D
|
TIM3CTLA = $FD0D
|
||||||
TIM3CNT = $FD0E
|
TIM3CNT = $FD0E
|
||||||
TIM3CTLB = $FD0F
|
TIM3CTLB = $FD0F
|
||||||
TIM4BKUP = $FD10
|
TIM4BKUP = $FD10
|
||||||
TIM4CTLA = $FD11
|
TIM4CTLA = $FD11
|
||||||
TIM4CNT = $FD12
|
TIM4CNT = $FD12
|
||||||
TIM4CTLB = $FD13
|
TIM4CTLB = $FD13
|
||||||
TIM5BKUP = $FD14
|
TIM5BKUP = $FD14
|
||||||
TIM5CTLA = $FD15
|
TIM5CTLA = $FD15
|
||||||
TIM5CNT = $FD16
|
TIM5CNT = $FD16
|
||||||
TIM5CTLB = $FD17
|
TIM5CTLB = $FD17
|
||||||
TIM6BKUP = $FD18
|
TIM6BKUP = $FD18
|
||||||
TIM6CTLA = $FD19
|
TIM6CTLA = $FD19
|
||||||
TIM6CNT = $FD1A
|
TIM6CNT = $FD1A
|
||||||
TIM6CTLB = $FD1B
|
TIM6CTLB = $FD1B
|
||||||
TIM7BKUP = $FD1C
|
TIM7BKUP = $FD1C
|
||||||
TIM7CTLA = $FD1D
|
TIM7CTLA = $FD1D
|
||||||
TIM7CNT = $FD1E
|
TIM7CNT = $FD1E
|
||||||
TIM7CTLB = $FD1F
|
TIM7CTLB = $FD1F
|
||||||
|
|
||||||
|
; Timer offsets
|
||||||
|
TIM_BACKUP = 0
|
||||||
|
TIM_CONTROLA = 1
|
||||||
|
TIM_COUNT = 2
|
||||||
|
TIM_CONTROLB = 3
|
||||||
|
|
||||||
|
; TIM_CONTROLA control bits
|
||||||
|
ENABLE_INT = %10000000
|
||||||
|
RESET_DONE = %01000000
|
||||||
|
ENABLE_RELOAD = %00010000
|
||||||
|
ENABLE_COUNT = %00001000
|
||||||
|
AUD_CLOCK_MASK = %00000111
|
||||||
|
; Clock settings
|
||||||
|
AUD_LINKING = %00000111
|
||||||
|
AUD_64 = %00000110
|
||||||
|
AUD_32 = %00000101
|
||||||
|
AUD_16 = %00000100
|
||||||
|
AUD_8 = %00000011
|
||||||
|
AUD_4 = %00000010
|
||||||
|
AUD_2 = %00000001
|
||||||
|
AUD_1 = %00000000
|
||||||
|
|
||||||
|
; TIM_CONTROLB control bits
|
||||||
|
TIMER_DONE = %00001000
|
||||||
|
LAST_CLOCK = %00000100
|
||||||
|
BORROW_IN = %00000010
|
||||||
|
BORROW_OUT = %00000001
|
||||||
|
|
||||||
; Mikey Audio
|
; Mikey Audio
|
||||||
|
|
||||||
AUDIO0 = $FD20 ; audio channel 0
|
AUDIO0 = $FD20 ; audio channel 0
|
||||||
AUDIO1 = $FD28 ; audio channel 1
|
AUDIO1 = $FD28 ; audio channel 1
|
||||||
AUDIO2 = $FD30 ; audio channel 2
|
AUDIO2 = $FD30 ; audio channel 2
|
||||||
AUDIO3 = $FD38 ; audio channel 3
|
AUDIO3 = $FD38 ; audio channel 3
|
||||||
|
|
||||||
AUD0VOL = $FD20
|
AUD0VOL = $FD20
|
||||||
AUD0FEED = $FD21
|
AUD0FEED = $FD21
|
||||||
AUD0OUT = $FD22
|
AUD0OUT = $FD22
|
||||||
AUD0SHIFT = $FD23
|
AUD0SHIFT = $FD23
|
||||||
AUD0BKUP = $FD24
|
AUD0BKUP = $FD24
|
||||||
AUD0CTLA = $FD25
|
AUD0CTLA = $FD25
|
||||||
AUD0CNT = $FD26
|
AUD0CNT = $FD26
|
||||||
AUD0CTLB = $FD27
|
AUD0CTLB = $FD27
|
||||||
AUD1VOL = $FD28
|
AUD1VOL = $FD28
|
||||||
AUD1FEED = $FD29
|
AUD1FEED = $FD29
|
||||||
AUD1OUT = $FD2A
|
AUD1OUT = $FD2A
|
||||||
AUD1SHIFT = $FD2B
|
AUD1SHIFT = $FD2B
|
||||||
AUD1BKUP = $FD2C
|
AUD1BKUP = $FD2C
|
||||||
AUD1CTLA = $FD2D
|
AUD1CTLA = $FD2D
|
||||||
AUD1CNT = $FD2E
|
AUD1CNT = $FD2E
|
||||||
AUD1CTLB = $FD2F
|
AUD1CTLB = $FD2F
|
||||||
AUD2VOL = $FD30
|
AUD2VOL = $FD30
|
||||||
AUD2FEED = $FD31
|
AUD2FEED = $FD31
|
||||||
AUD2OUT = $FD32
|
AUD2OUT = $FD32
|
||||||
AUD2SHIFT = $FD33
|
AUD2SHIFT = $FD33
|
||||||
AUD2BKUP = $FD34
|
AUD2BKUP = $FD34
|
||||||
AUD2CTLA = $FD35
|
AUD2CTLA = $FD35
|
||||||
AUD2CNT = $FD36
|
AUD2CNT = $FD36
|
||||||
AUD2CTLB = $FD37
|
AUD2CTLB = $FD37
|
||||||
AUD3VOL = $FD38
|
AUD3VOL = $FD38
|
||||||
AUD3FEED = $FD39
|
AUD3FEED = $FD39
|
||||||
AUD3OUT = $FD3A
|
AUD3OUT = $FD3A
|
||||||
AUD3SHIFT = $FD3B
|
AUD3SHIFT = $FD3B
|
||||||
AUD3BKUP = $FD3C
|
AUD3BKUP = $FD3C
|
||||||
AUD3CTLA = $FD3D
|
AUD3CTLA = $FD3D
|
||||||
AUD3CNT = $FD3E
|
AUD3CNT = $FD3E
|
||||||
AUD3CTLB = $FD3F
|
AUD3CTLB = $FD3F
|
||||||
MSTEREO = $FD50
|
|
||||||
|
|
||||||
; Mikey Misc
|
; AUD_CONTROL bits are almost identical to TIM_CONTROLA bits.
|
||||||
|
; See TIM_CONTROLA above for the other definitions
|
||||||
|
FEEDBACK_7 = %10000000
|
||||||
|
ENABLE_INTEGRATE = %00100000
|
||||||
|
|
||||||
|
; Stereo control registers follow
|
||||||
|
; Stereo capability does not exist in all Lynxes
|
||||||
|
; Left and right may be reversed, and if so will be corrected in a later
|
||||||
|
; release
|
||||||
|
ATTENREG0 = $FD40 ; Stereo attenuation registers
|
||||||
|
ATTENREG1 = $FD41
|
||||||
|
ATTENREG2 = $FD42
|
||||||
|
ATTENREG3 = $FD43
|
||||||
|
|
||||||
|
MPAN = $FD44
|
||||||
|
MSTEREO = $FD50
|
||||||
|
; Bit definitions for MPAN and MSTEREO registers
|
||||||
|
LEFT_ATTENMASK = %11110000
|
||||||
|
RIGHT_ATTENMASK = %00001111
|
||||||
|
LEFT3_SELECT = %10000000
|
||||||
|
LEFT2_SELECT = %01000000
|
||||||
|
LEFT1_SELECT = %00100000
|
||||||
|
LEFT0_SELECT = %00010000
|
||||||
|
RIGHT3_SELECT = %00001000
|
||||||
|
RIGHT2_SELECT = %00000100
|
||||||
|
RIGHT1_SELECT = %00000010
|
||||||
|
RIGHT0_SELECT = %00000001
|
||||||
|
|
||||||
|
; Mikey interrupts
|
||||||
|
|
||||||
|
INTRST = $FD80
|
||||||
|
INTSET = $FD81
|
||||||
|
|
||||||
; Interrupt bits in INTRST and INTSET
|
; Interrupt bits in INTRST and INTSET
|
||||||
TIMER0_INTERRUPT = $01
|
TIMER0_INTERRUPT = %00000001
|
||||||
TIMER1_INTERRUPT = $02
|
TIMER1_INTERRUPT = %00000010
|
||||||
TIMER2_INTERRUPT = $04
|
TIMER2_INTERRUPT = %00000100
|
||||||
TIMER3_INTERRUPT = $08
|
TIMER3_INTERRUPT = %00001000
|
||||||
TIMER4_INTERRUPT = $10
|
TIMER4_INTERRUPT = %00010000
|
||||||
TIMER5_INTERRUPT = $20
|
TIMER5_INTERRUPT = %00100000
|
||||||
TIMER6_INTERRUPT = $40
|
TIMER6_INTERRUPT = %01000000
|
||||||
TIMER7_INTERRUPT = $80
|
TIMER7_INTERRUPT = %10000000
|
||||||
|
|
||||||
HBL_INTERRUPT = TIMER0_INTERRUPT
|
HBL_INTERRUPT = TIMER0_INTERRUPT
|
||||||
VBL_INTERRUPT = TIMER2_INTERRUPT
|
VBL_INTERRUPT = TIMER2_INTERRUPT
|
||||||
SERIAL_INTERRUPT = TIMER4_INTERRUPT
|
SERIAL_INTERRUPT = TIMER4_INTERRUPT
|
||||||
SND_INTERRUPT = TIMER7_INTERRUPT
|
SND_INTERRUPT = TIMER7_INTERRUPT
|
||||||
|
|
||||||
INTRST = $FD80
|
MAGRDY0 = $FD84
|
||||||
INTSET = $FD81
|
MAGRDY1 = $FD85
|
||||||
MAGRDY0 = $FD84
|
AUDIN = $FD86
|
||||||
MAGRDY1 = $FD85
|
SYSCTL1 = $FD87
|
||||||
AUDIN = $FD86
|
; SYSCTL1 bit definitions
|
||||||
SYSCTL1 = $FD87
|
POWERON = %00000010
|
||||||
MIKEYHREV = $FD88
|
CART_ADDR_STROBE = %00000001
|
||||||
MIKEYSREV = $FD89
|
|
||||||
IODIR = $FD8A
|
|
||||||
IODAT = $FD8B
|
|
||||||
TxIntEnable = %10000000
|
|
||||||
RxIntEnable = %01000000
|
|
||||||
TxParEnable = %00010000
|
|
||||||
ResetErr = %00001000
|
|
||||||
TxOpenColl = %00000100
|
|
||||||
TxBreak = %00000010
|
|
||||||
ParEven = %00000001
|
|
||||||
TxReady = %10000000
|
|
||||||
RxReady = %01000000
|
|
||||||
TxEmpty = %00100000
|
|
||||||
RxParityErr = %00010000
|
|
||||||
RxOverrun = %00001000
|
|
||||||
RxFrameErr = %00000100
|
|
||||||
RxBreak = %00000010
|
|
||||||
ParityBit = %00000001
|
|
||||||
SERCTL = $FD8C
|
|
||||||
SERDAT = $FD8D
|
|
||||||
SDONEACK = $FD90
|
|
||||||
CPUSLEEP = $FD91
|
|
||||||
DISPCTL = $FD92
|
|
||||||
PBKUP = $FD93
|
|
||||||
DISPADRL = $FD94
|
|
||||||
DISPADRH = $FD95
|
|
||||||
MTEST0 = $FD9C
|
|
||||||
MTEST1 = $FD9D
|
|
||||||
MTEST2 = $FD9E
|
|
||||||
PALETTE = $FDA0 ; hardware rgb palette
|
|
||||||
GCOLMAP = $FDA0 ; hardware rgb palette (green)
|
|
||||||
RBCOLMAP = $FDB0 ; hardware rgb palette (red-blue)
|
|
||||||
|
|
||||||
|
MIKEYHREV = $FD88
|
||||||
|
MIKEYSREV = $FD89
|
||||||
|
|
||||||
; ***
|
IODIR = $FD8A
|
||||||
; *** Misc Hardware + 6502 vectors
|
IODAT = $FD8B
|
||||||
; ***
|
; IODIR and IODAT bit definitions
|
||||||
|
AUDIN_BIT = %00010000 ; Note that there is also the address AUDIN
|
||||||
|
READ_ENABLE = %00010000 ; Same bit for AUDIN_BIT
|
||||||
|
RESTLESS = %00001000
|
||||||
|
NOEXP = %00000100 ; If set, redeye is not connected
|
||||||
|
CART_ADDR_DATA = %00000010
|
||||||
|
CART_POWER_OFF = %00000010 ; Same bit for CART_ADDR_DATA
|
||||||
|
EXTERNAL_POWER = %00000001
|
||||||
|
|
||||||
MAPCTL = $FFF9
|
SERCTL = $FD8C
|
||||||
VECTORS = $FFFB
|
; SERCTL bit definitions for write operations
|
||||||
INTVECTL = $FFFE
|
TXINTEN = %10000000
|
||||||
INTVECTH = $FFFF
|
RXINTEN = %01000000
|
||||||
RSTVECTL = $FFFC
|
PAREN = %00010000
|
||||||
RSTVECTH = $FFFD
|
RESETERR = %00001000
|
||||||
NMIVECTL = $FFFA
|
TXOPEN = %00000100
|
||||||
NMIVECTH = $FFFB
|
TXBRK = %00000010
|
||||||
|
PAREVEN = %00000001
|
||||||
|
; SERCTL bit definitions for read operations
|
||||||
|
TXRDY = %10000000
|
||||||
|
RXRDY = %01000000
|
||||||
|
TXEMPTY = %00100000
|
||||||
|
PARERR = %00010000
|
||||||
|
OVERRUN = %00001000
|
||||||
|
FRAMERR = %00000100
|
||||||
|
RXBRK = %00000010
|
||||||
|
PARBIT = %00000001
|
||||||
|
|
||||||
|
SERDAT = $FD8D
|
||||||
|
SDONEACK = $FD90
|
||||||
|
CPUSLEEP = $FD91
|
||||||
|
DISPCTL = $FD92
|
||||||
|
; DISPCTL bit definitions
|
||||||
|
DISP_COLOR = %10000000 ; must be set to 1
|
||||||
|
DISP_FOURBIT = %01000000 ; must be set to 1
|
||||||
|
DISP_FLIP = %00100000
|
||||||
|
DMA_ENABLE = %00010000 ; must be set to 1
|
||||||
|
|
||||||
|
PBKUP = $FD93
|
||||||
|
DISPADRL = $FD94
|
||||||
|
DISPADRH = $FD95
|
||||||
|
|
||||||
|
MTEST0 = $FD9C
|
||||||
|
; MTEST0 bit definitions
|
||||||
|
AT_CNT16 = %10000000
|
||||||
|
AT_TEST = %01000000
|
||||||
|
XCLKEN = %00100000
|
||||||
|
UART_TURBO = %00010000
|
||||||
|
ROM_SEL = %00001000
|
||||||
|
ROM_TEST = %00000100
|
||||||
|
M_TEST = %00000010
|
||||||
|
CPU_TEST = %00000001
|
||||||
|
|
||||||
|
MTEST1 = $FD9D
|
||||||
|
; MTEST1 bit definitions
|
||||||
|
P_CNT16 = %01000000
|
||||||
|
REF_CNT16 = %00100000
|
||||||
|
VID_TRIG = %00010000
|
||||||
|
REF_TRIG = %00001000
|
||||||
|
VID_DMA_DIS = %00000100
|
||||||
|
REF_FAST = %00000010
|
||||||
|
REF_DIS = %00000001
|
||||||
|
|
||||||
|
MTEST2 = $FD9E
|
||||||
|
; MTEST2 bit definitions
|
||||||
|
V_STROBE = %00010000
|
||||||
|
V_ZERO = %00001000
|
||||||
|
H_120 = %00000100
|
||||||
|
H_ZERO = %00000010
|
||||||
|
V_BLANKEF = %00000001
|
||||||
|
|
||||||
|
PALETTE = $FDA0 ; hardware rgb palette
|
||||||
|
GCOLMAP = $FDA0 ; hardware rgb palette (green)
|
||||||
|
RBCOLMAP = $FDB0 ; hardware rgb palette (red-blue)
|
||||||
|
|
||||||
|
; Memory mapping control and 6502 vectors
|
||||||
|
|
||||||
|
MAPCTL = $FFF9
|
||||||
|
; MAPCTL bit definitions
|
||||||
|
TURBO_DISABLE = %10000000
|
||||||
|
VECTOR_SPACE = %00001000 ; 1 maps RAM into specified space
|
||||||
|
ROM_SPACE = %00000100
|
||||||
|
MIKEY_SPACE = %00000010
|
||||||
|
SUZY_SPACE = %00000001
|
||||||
|
|
||||||
|
VECTORS = $FFFB
|
||||||
|
INTVECTL = $FFFE
|
||||||
|
INTVECTH = $FFFF
|
||||||
|
RSTVECTL = $FFFC
|
||||||
|
RSTVECTH = $FFFD
|
||||||
|
NMIVECTL = $FFFA
|
||||||
|
NMIVECTH = $FFFB
|
||||||
|
|||||||
@@ -505,4 +505,12 @@ OPC_ISC_aby = $FB
|
|||||||
OPC_NOP_abx = $FC
|
OPC_NOP_abx = $FC
|
||||||
OPC_ISC_abx = $FF
|
OPC_ISC_abx = $FF
|
||||||
|
|
||||||
|
.if (.cpu .bitand ::CPU_ISET_6502DTV)
|
||||||
|
|
||||||
|
OPC_BRA = $12
|
||||||
|
OPC_SAC_imm = $32
|
||||||
|
OPC_SIR_imm = $42
|
||||||
|
|
||||||
|
.endif
|
||||||
|
|
||||||
.endif
|
.endif
|
||||||
|
|||||||
@@ -50,7 +50,6 @@ PET_2000 = $CA
|
|||||||
PET_3000 = $FC
|
PET_3000 = $FC
|
||||||
PET_4000 = $FD
|
PET_4000 = $FD
|
||||||
|
|
||||||
|
|
||||||
;----------------------------------------------------------------------------
|
;----------------------------------------------------------------------------
|
||||||
; Vector and other locations
|
; Vector and other locations
|
||||||
|
|
||||||
@@ -59,7 +58,25 @@ BRKVec := $0092
|
|||||||
NMIVec := $0094
|
NMIVec := $0094
|
||||||
|
|
||||||
; ---------------------------------------------------------------------------
|
; ---------------------------------------------------------------------------
|
||||||
; I/O: 6522 VIA2
|
; I/O: 6520 PIA1
|
||||||
|
|
||||||
|
PIA1 := $E810 ; PIA1 base address
|
||||||
|
PIA1_PORTA := PIA1+$0 ; Port A (PA) and data direction register A (DDRA)
|
||||||
|
PIA1_PACTL := PIA1+$1 ; Port A control register (CRA)
|
||||||
|
PIA1_PORTB := PIA1+$2 ; Port B (PB) and data direction register B (DDRB)
|
||||||
|
PIA1_PBCTL := PIA1+$3 ; Port B control register (CRB)
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; I/O: 6520 PIA2
|
||||||
|
|
||||||
|
PIA2 := $E820 ; PIA2 base address
|
||||||
|
PIA2_PORTA := PIA2+$0 ; Port A (PA) and data direction register A (DDRA)
|
||||||
|
PIA2_PACTL := PIA2+$1 ; Port A control register (CRA)
|
||||||
|
PIA2_PORTB := PIA2+$2 ; Port B (PB) and data direction register B (DDRB)
|
||||||
|
PIA2_PBCTL := PIA2+$3 ; Port B control register (CRB)
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; I/O: 6522 VIA
|
||||||
|
|
||||||
VIA := $E840 ; VIA base address
|
VIA := $E840 ; VIA base address
|
||||||
VIA_PB := VIA+$0 ; Port register B
|
VIA_PB := VIA+$0 ; Port register B
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ TMPPTR := $22 ; Temporary ptr used by BASIC
|
|||||||
VARTAB := $2D ; Pointer to start of BASIC variables
|
VARTAB := $2D ; Pointer to start of BASIC variables
|
||||||
MEMSIZE := $37 ; Pointer to highest BASIC RAM location (+1)
|
MEMSIZE := $37 ; Pointer to highest BASIC RAM location (+1)
|
||||||
TXTPTR := $3B ; Pointer into BASIC source code
|
TXTPTR := $3B ; Pointer into BASIC source code
|
||||||
|
STATUS := $90 ; Kernal I/O completion status
|
||||||
TIME := $A3 ; 60HZ clock
|
TIME := $A3 ; 60HZ clock
|
||||||
FNAM_LEN := $AB ; Length of filename
|
FNAM_LEN := $AB ; Length of filename
|
||||||
LFN := $AC ; Logical file number
|
LFN := $AC ; Logical file number
|
||||||
|
|||||||
98
asminc/rp6502.inc
Normal file
98
asminc/rp6502.inc
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
; Picocomputer 6502 general defines
|
||||||
|
|
||||||
|
; RIA UART
|
||||||
|
RIA_READY := $FFE0 ; TX=$80 RX=$40
|
||||||
|
RIA_TX := $FFE1
|
||||||
|
RIA_RX := $FFE2
|
||||||
|
|
||||||
|
; VSYNC from PIX VGA
|
||||||
|
RIA_VSYNC := $FFE3
|
||||||
|
|
||||||
|
; RIA XRAM portal 0
|
||||||
|
RIA_RW0 := $FFE4
|
||||||
|
RIA_STEP0 := $FFE5
|
||||||
|
RIA_ADDR0 := $FFE6
|
||||||
|
|
||||||
|
; RIA XRAM portal 1
|
||||||
|
RIA_RW1 := $FFE8
|
||||||
|
RIA_STEP1 := $FFE9
|
||||||
|
RIA_ADDR1 := $FFEA
|
||||||
|
|
||||||
|
; RIA OS fastcall
|
||||||
|
RIA_XSTACK := $FFEC
|
||||||
|
RIA_ERRNO := $FFED
|
||||||
|
RIA_OP := $FFEF
|
||||||
|
RIA_IRQ := $FFF0
|
||||||
|
RIA_SPIN := $FFF1
|
||||||
|
RIA_BUSY := $FFF2 ; Bit $80
|
||||||
|
RIA_A := $FFF4
|
||||||
|
RIA_X := $FFF6
|
||||||
|
RIA_SREG := $FFF8
|
||||||
|
|
||||||
|
; RIA OS operation numbers
|
||||||
|
RIA_OP_EXIT := $FF
|
||||||
|
RIA_OP_ZXSTACK := $00
|
||||||
|
RIA_OP_XREG := $01
|
||||||
|
RIA_OP_PHI2 := $02
|
||||||
|
RIA_OP_CODEPAGE := $03
|
||||||
|
RIA_OP_LRAND := $04
|
||||||
|
RIA_OP_STDIN_OPT := $05
|
||||||
|
RIA_OP_CLOCK := $0F
|
||||||
|
RIA_OP_CLOCK_GETRES := $10
|
||||||
|
RIA_OP_CLOCK_GETTIME := $11
|
||||||
|
RIA_OP_CLOCK_SETTIME := $12
|
||||||
|
RIA_OP_CLOCK_GETTIMEZONE := $13
|
||||||
|
RIA_OP_OPEN := $14
|
||||||
|
RIA_OP_CLOSE := $15
|
||||||
|
RIA_OP_READ_XSTACK := $16
|
||||||
|
RIA_OP_READ_XRAM := $17
|
||||||
|
RIA_OP_WRITE_XSTACK := $18
|
||||||
|
RIA_OP_WRITE_XRAM := $19
|
||||||
|
RIA_OP_LSEEK := $1A
|
||||||
|
RIA_OP_UNLINK := $1B
|
||||||
|
RIA_OP_RENAME := $1C
|
||||||
|
|
||||||
|
; 6522 VIA
|
||||||
|
VIA := $FFD0 ; VIA base address
|
||||||
|
VIA_PB := VIA+$0 ; Port register B
|
||||||
|
VIA_PA1 := VIA+$1 ; Port register A
|
||||||
|
VIA_PRB := VIA+$0 ; *** Deprecated ***
|
||||||
|
VIA_PRA := VIA+$1 ; *** Deprecated ***
|
||||||
|
VIA_DDRB := VIA+$2 ; Data direction register B
|
||||||
|
VIA_DDRA := VIA+$3 ; Data direction register A
|
||||||
|
VIA_T1CL := VIA+$4 ; Timer 1, low byte
|
||||||
|
VIA_T1CH := VIA+$5 ; Timer 1, high byte
|
||||||
|
VIA_T1LL := VIA+$6 ; Timer 1 latch, low byte
|
||||||
|
VIA_T1LH := VIA+$7 ; Timer 1 latch, high byte
|
||||||
|
VIA_T2CL := VIA+$8 ; Timer 2, low byte
|
||||||
|
VIA_T2CH := VIA+$9 ; Timer 2, high byte
|
||||||
|
VIA_SR := VIA+$A ; Shift register
|
||||||
|
VIA_CR := VIA+$B ; Auxiliary control register
|
||||||
|
VIA_PCR := VIA+$C ; Peripheral control register
|
||||||
|
VIA_IFR := VIA+$D ; Interrupt flag register
|
||||||
|
VIA_IER := VIA+$E ; Interrupt enable register
|
||||||
|
VIA_PA2 := VIA+$F ; Port register A w/o handshake
|
||||||
|
|
||||||
|
; Values in ___oserror are the union of these FatFs errors and errno.inc
|
||||||
|
.enum
|
||||||
|
FR_OK = 32 ; Succeeded
|
||||||
|
FR_DISK_ERR ; A hard error occurred in the low level disk I/O layer
|
||||||
|
FR_INT_ERR ; Assertion failed
|
||||||
|
FR_NOT_READY ; The physical drive cannot work
|
||||||
|
FR_NO_FILE ; Could not find the file
|
||||||
|
FR_NO_PATH ; Could not find the path
|
||||||
|
FR_INVALID_NAME ; The path name format is invalid
|
||||||
|
FR_DENIED ; Access denied due to prohibited access or directory full
|
||||||
|
FR_EXIST ; Access denied due to prohibited access
|
||||||
|
FR_INVALID_OBJECT ; The file/directory object is invalid
|
||||||
|
FR_WRITE_PROTECTED ; The physical drive is write protected
|
||||||
|
FR_INVALID_DRIVE ; The logical drive number is invalid
|
||||||
|
FR_NOT_ENABLED ; The volume has no work area
|
||||||
|
FR_NO_FILESYSTEM ; There is no valid FAT volume
|
||||||
|
FR_MKFS_ABORTED ; The f_mkfs() aborted due to any problem
|
||||||
|
FR_TIMEOUT ; Could not get a grant to access the volume within defined period
|
||||||
|
FR_LOCKED ; The operation is rejected according to the file sharing policy
|
||||||
|
FR_NOT_ENOUGH_CORE ; LFN working buffer could not be allocated
|
||||||
|
FR_TOO_MANY_OPEN_FILES ; Number of open files > FF_FS_LOCK
|
||||||
|
FR_INVALID_PARAMETER ; Given parameter is invalid
|
||||||
|
.endenum
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
;* *
|
;* *
|
||||||
;* *
|
;* *
|
||||||
;*(C) 2003-2006, Ullrich von Bassewitz *
|
;*(C) 2003-2006, Ullrich von Bassewitz *
|
||||||
;* R<EFBFBD>merstrasse 52 *
|
;* Roemerstrasse 52 *
|
||||||
;* D-70794 Filderstadt *
|
;* D-70794 Filderstadt *
|
||||||
;*EMail: uz@cc65.org *
|
;*EMail: uz@cc65.org *
|
||||||
;* *
|
;* *
|
||||||
|
|||||||
@@ -49,8 +49,8 @@ SIGCOUNT = 6 ; Number of signals
|
|||||||
.global sigtable
|
.global sigtable
|
||||||
|
|
||||||
; Function declarations
|
; Function declarations
|
||||||
.global __sig_ign
|
.global ___sig_ign
|
||||||
.global __sig_dfl
|
.global ___sig_dfl
|
||||||
.global _signal
|
.global _signal
|
||||||
.global _raise
|
.global _raise
|
||||||
|
|
||||||
|
|||||||
75
asminc/sim65.inc
Normal file
75
asminc/sim65.inc
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
|
||||||
|
; *******************************************************************************
|
||||||
|
; ** **
|
||||||
|
; ** sim65.inc : assembler definitions for the sim6502 and sim65c02 targets. **
|
||||||
|
; ** **
|
||||||
|
; ** Sidney Cadot, January 2025 **
|
||||||
|
; ** **
|
||||||
|
; *******************************************************************************
|
||||||
|
|
||||||
|
; The '_peripherals' symbol is defined in the linker configuration
|
||||||
|
; file to correspond to the first address in the periperal memory
|
||||||
|
; aparture.
|
||||||
|
;
|
||||||
|
; We use it here as a base address for all peripheral addresses.
|
||||||
|
|
||||||
|
.import _peripherals
|
||||||
|
|
||||||
|
; **************************************************************
|
||||||
|
; ** **
|
||||||
|
; ** Define assembler symbols for the "counter" peripheral. **
|
||||||
|
; ** **
|
||||||
|
; **************************************************************
|
||||||
|
|
||||||
|
peripheral_counter_base := _peripherals + 0
|
||||||
|
|
||||||
|
peripheral_counter_latch := peripheral_counter_base + 0
|
||||||
|
peripheral_counter_select := peripheral_counter_base + 1
|
||||||
|
peripheral_counter_value := peripheral_counter_base + 2
|
||||||
|
|
||||||
|
; Values for the peripheral_counter_select register.
|
||||||
|
|
||||||
|
COUNTER_SELECT_CLOCKCYCLE_COUNTER = $00
|
||||||
|
COUNTER_SELECT_INSTRUCTION_COUNTER = $01
|
||||||
|
COUNTER_SELECT_IRQ_COUNTER = $02
|
||||||
|
COUNTER_SELECT_NMI_COUNTER = $03
|
||||||
|
COUNTER_SELECT_WALLCLOCK_TIME = $80
|
||||||
|
COUNTER_SELECT_WALLCLOCK_TIME_SPLIT = $81
|
||||||
|
|
||||||
|
; ********************************************************************
|
||||||
|
; ** **
|
||||||
|
; ** Define assembler symbols for the "sim65 control" peripheral. **
|
||||||
|
; ** **
|
||||||
|
; ********************************************************************
|
||||||
|
|
||||||
|
peripheral_sim65_base := _peripherals + 10
|
||||||
|
|
||||||
|
peripheral_sim65_cpu_mode := peripheral_sim65_base + 0
|
||||||
|
peripheral_sim65_trace_mode := peripheral_sim65_base + 1
|
||||||
|
|
||||||
|
; Values for the peripheral_sim65_cpu_mode register.
|
||||||
|
|
||||||
|
SIM65_CPU_MODE_6502 = $00
|
||||||
|
SIM65_CPU_MODE_65C02 = $01
|
||||||
|
SIM65_CPU_MODE_6502X = $02
|
||||||
|
|
||||||
|
; Bitfield values for the peripheral_sim65_trace_mode field.
|
||||||
|
|
||||||
|
SIM65_TRACE_MODE_FIELD_INSTR_COUNTER = $40
|
||||||
|
SIM65_TRACE_MODE_FIELD_CLOCK_COUNTER = $20
|
||||||
|
SIM65_TRACE_MODE_FIELD_PC = $10
|
||||||
|
SIM65_TRACE_MODE_FIELD_INSTR_BYTES = $08
|
||||||
|
SIM65_TRACE_MODE_FIELD_INSTR_ASSEMBLY = $04
|
||||||
|
SIM65_TRACE_MODE_FIELD_CPU_REGISTERS = $02
|
||||||
|
SIM65_TRACE_MODE_FIELD_CC65_SP = $01
|
||||||
|
|
||||||
|
; Values for the peripheral_sim65_trace_mode field that fully disable / enable tracing.
|
||||||
|
|
||||||
|
SIM65_TRACE_MODE_DISABLE = $00
|
||||||
|
SIM65_TRACE_MODE_ENABLE_FULL = $7F
|
||||||
|
|
||||||
|
; ************************
|
||||||
|
; ** **
|
||||||
|
; ** End of sim65.inc **
|
||||||
|
; ** **
|
||||||
|
; ************************
|
||||||
64
asminc/stat.inc
Normal file
64
asminc/stat.inc
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
;****************************************************************************
|
||||||
|
;* *
|
||||||
|
;* stat.inc *
|
||||||
|
;* *
|
||||||
|
;* Stat struct *
|
||||||
|
;* *
|
||||||
|
;* *
|
||||||
|
;* *
|
||||||
|
;*(C) 2023 Colin Leroy-Mira <colin@colino.net> *
|
||||||
|
;* *
|
||||||
|
;* *
|
||||||
|
;*This software is provided 'as-is', without any expressed or implied *
|
||||||
|
;*warranty. In no event will the authors be held liable for any damages *
|
||||||
|
;*arising from the use of this software. *
|
||||||
|
;* *
|
||||||
|
;*Permission is granted to anyone to use this software for any purpose, *
|
||||||
|
;*including commercial applications, and to alter it and redistribute it *
|
||||||
|
;*freely, subject to the following restrictions: *
|
||||||
|
;* *
|
||||||
|
;*1. The origin of this software must not be misrepresented; you must not *
|
||||||
|
;* claim that you wrote the original software. If you use this software *
|
||||||
|
;* in a product, an acknowledgment in the product documentation would be *
|
||||||
|
;* appreciated but is not required. *
|
||||||
|
;*2. Altered source versions must be plainly marked as such, and must not *
|
||||||
|
;* be misrepresented as being the original software. *
|
||||||
|
;*3. This notice may not be removed or altered from any source *
|
||||||
|
;* distribution. *
|
||||||
|
;* *
|
||||||
|
;****************************************************************************
|
||||||
|
|
||||||
|
.include "time.inc"
|
||||||
|
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
; st_mode values
|
||||||
|
|
||||||
|
S_IFDIR = $01
|
||||||
|
S_IFREG = $02
|
||||||
|
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
; struct stat
|
||||||
|
|
||||||
|
.struct stat
|
||||||
|
st_dev .dword
|
||||||
|
st_ino .dword
|
||||||
|
st_mode .byte
|
||||||
|
st_nlink .dword
|
||||||
|
st_uid .byte
|
||||||
|
st_gid .byte
|
||||||
|
st_size .dword
|
||||||
|
st_atim .tag timespec
|
||||||
|
st_ctim .tag timespec
|
||||||
|
st_mtim .tag timespec
|
||||||
|
.ifdef __APPLE2__
|
||||||
|
st_access .byte
|
||||||
|
st_type .byte
|
||||||
|
st_auxtype .word
|
||||||
|
st_storagetype .byte
|
||||||
|
st_blocks .word
|
||||||
|
st_mod_date .word
|
||||||
|
st_mod_time .word
|
||||||
|
st_create_date .word
|
||||||
|
st_create_time .word
|
||||||
|
.endif
|
||||||
|
.endstruct
|
||||||
46
asminc/statvfs.inc
Normal file
46
asminc/statvfs.inc
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
;****************************************************************************
|
||||||
|
;* *
|
||||||
|
;* statvfs.inc *
|
||||||
|
;* *
|
||||||
|
;* Statvfs struct *
|
||||||
|
;* *
|
||||||
|
;* *
|
||||||
|
;* *
|
||||||
|
;*(C) 2023 Colin Leroy-Mira <colin@colino.net> *
|
||||||
|
;* *
|
||||||
|
;* *
|
||||||
|
;*This software is provided 'as-is', without any expressed or implied *
|
||||||
|
;*warranty. In no event will the authors be held liable for any damages *
|
||||||
|
;*arising from the use of this software. *
|
||||||
|
;* *
|
||||||
|
;*Permission is granted to anyone to use this software for any purpose, *
|
||||||
|
;*including commercial applications, and to alter it and redistribute it *
|
||||||
|
;*freely, subject to the following restrictions: *
|
||||||
|
;* *
|
||||||
|
;*1. The origin of this software must not be misrepresented; you must not *
|
||||||
|
;* claim that you wrote the original software. If you use this software *
|
||||||
|
;* in a product, an acknowledgment in the product documentation would be *
|
||||||
|
;* appreciated but is not required. *
|
||||||
|
;*2. Altered source versions must be plainly marked as such, and must not *
|
||||||
|
;* be misrepresented as being the original software. *
|
||||||
|
;*3. This notice may not be removed or altered from any source *
|
||||||
|
;* distribution. *
|
||||||
|
;* *
|
||||||
|
;****************************************************************************
|
||||||
|
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
; struct statvfs
|
||||||
|
|
||||||
|
.struct statvfs
|
||||||
|
f_bsize .dword
|
||||||
|
f_frsize .dword
|
||||||
|
f_blocks .dword
|
||||||
|
f_bfree .dword
|
||||||
|
f_bavail .dword
|
||||||
|
f_files .dword
|
||||||
|
f_ffree .dword
|
||||||
|
f_favail .dword
|
||||||
|
f_fsid .dword
|
||||||
|
f_flag .dword
|
||||||
|
f_namemax .dword
|
||||||
|
.endstruct
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
;* */
|
;* */
|
||||||
;* */
|
;* */
|
||||||
;* (C) 2003-2005, Ullrich von Bassewitz */
|
;* (C) 2003-2005, Ullrich von Bassewitz */
|
||||||
;* R<EFBFBD>merstrasse 52 */
|
;* Roemerstrasse 52 */
|
||||||
;* D-70794 Filderstadt */
|
;* D-70794 Filderstadt */
|
||||||
;* EMail: uz@cc65.org */
|
;* EMail: uz@cc65.org */
|
||||||
;* */
|
;* */
|
||||||
@@ -44,7 +44,9 @@ EOF = -1
|
|||||||
.if .defined(__APPLE2__)
|
.if .defined(__APPLE2__)
|
||||||
FILENAME_MAX = 64+1
|
FILENAME_MAX = 64+1
|
||||||
.elseif .defined(__ATARI__)
|
.elseif .defined(__ATARI__)
|
||||||
FILENAME_MAX = 12+1
|
FILENAME_MAX = 63+1
|
||||||
|
.elseif .defined(__CBM__)
|
||||||
|
FILENAME_MAX = 255
|
||||||
.elseif .defined(__LUNIX__)
|
.elseif .defined(__LUNIX__)
|
||||||
FILENAME_MAX = 80+1
|
FILENAME_MAX = 80+1
|
||||||
.elseif .defined(__TELESTRAT__)
|
.elseif .defined(__TELESTRAT__)
|
||||||
|
|||||||
186
asminc/sym1.inc
Normal file
186
asminc/sym1.inc
Normal file
@@ -0,0 +1,186 @@
|
|||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
;
|
||||||
|
; SYM-1 definitions
|
||||||
|
;
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
RAMSTART := $0200 ; Entry point
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; Monitor Functions
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
WARM := $8003 ; Monitor entry
|
||||||
|
SVNMI := $809B ; Save NMI entry
|
||||||
|
INBYTE := $81D9 ; Get two HEX characters and pack
|
||||||
|
ASCNIB := $8275 ; Test for carriage-return
|
||||||
|
INCCMP := $82B2 ; Increment pointer
|
||||||
|
CHKSAD := $82DD ; Compute checksum
|
||||||
|
OUTPC := $82EE ; Display program counter
|
||||||
|
OUTBYT := $82FA ; Print byte as two ASCII characters
|
||||||
|
OUTS2 := $8319 ; Print pointer
|
||||||
|
INSTAT := $8386 ; Determine if key is pressed
|
||||||
|
GETKEY := $88AF ; Get key (disregarding monitor login)
|
||||||
|
SCAND := $8906 ; Flash LED display (once)
|
||||||
|
KEYQ := $8923 ; Test for keypress
|
||||||
|
BEEP := $8972 ; Make a beep
|
||||||
|
CONFIG := $89A5 ; Configure I/O
|
||||||
|
OUTDSP := $89C1 ; Output to on-board LED display
|
||||||
|
INCHR := $8A1B ; Input character and convert to uppercase
|
||||||
|
OUTCHR := $8A47 ; Output character
|
||||||
|
INTCHR := $8A58 ; Input character without case conversion
|
||||||
|
DLYF := $8AE6 ; Delay 1 bit time
|
||||||
|
DLYH := $8AE9 ; Delay 1/2 bit time
|
||||||
|
RESET := $8B4A ; Hard reset
|
||||||
|
ACCESS := $8B86 ; Unlock lowest 4K memory
|
||||||
|
NACCES := $8B9C ; Lock lowest 4K memory
|
||||||
|
L8C78 := $8C78 ; Link to tape
|
||||||
|
DUMPT := $8E87 ; Dump memory to tape
|
||||||
|
LOADT := $8C78 ; Load memory from tape
|
||||||
|
TAPEMODE := $00FD ; Top bit on for high-speed
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; System Memory
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
DISBUF := $A640 ; On-Board Display Buffer
|
||||||
|
DISBUF0 := $A640 ; Left-Most digit
|
||||||
|
DISBUF1 := $A641 ; Second digit
|
||||||
|
DISBUF2 := $A642 ; Third
|
||||||
|
DISBUF3 := $A643 ; Fourth
|
||||||
|
DISBUF4 := $A644 ; Fifth
|
||||||
|
DISBUF5 := $A645 ; Sixth and right-most digit
|
||||||
|
DISBUF6 := $A646 ; Not-used / right of display (shift buffer)
|
||||||
|
RDIG := $A645 ; Right-most digit (same as DISBUF5)
|
||||||
|
P3L := $A64A ; Parameter 3 (low-byte)
|
||||||
|
P3H := $A64B ; (high-byte)
|
||||||
|
P2L := $A64C ; Parameter 2
|
||||||
|
P2H := $A64D ;
|
||||||
|
P1L := $A64E ; Parameter 1
|
||||||
|
P1H := $A64F
|
||||||
|
PARNR := $A649 ; Number of Parameters Entered
|
||||||
|
PADBIT := $A650 ; Pad Bits for Carriage Return
|
||||||
|
SDBYT := $A651 ; Baud Rate for RS232 (01-4800,06-2400,10-1200,24-600,4C-300,D5-110)
|
||||||
|
ERCNT := $A652 ; Error Count (Max FF)
|
||||||
|
TECHO := $A653 ; Terminal Echo (bit-7=ECHO/NO, 6=CTL-O TOGGLE)
|
||||||
|
TOUTFL := $A654 ; Output Flags (bit-7=CRT IN, 6=TTY IN, 5=TTY OUT, 4=CRT OUT)
|
||||||
|
KSHFL := $A655 ; Keyboard Shift Flag
|
||||||
|
TV := $A656 ; Trace Velocity (0=Single Step)
|
||||||
|
LSTCOM := $A657 ; Last Monitor Command
|
||||||
|
MAXRC := $A658 ; Maximum Record Length for Memory Dump
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; Register Followers
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
PCLR := $A659 ; Program Counter (low-byte)
|
||||||
|
PCHR := $A65A ; (high-byte)
|
||||||
|
SR := $A65B ; Stack Pointer
|
||||||
|
FR := $A65C ; Status Register Flags
|
||||||
|
AR := $A65D ; A Register
|
||||||
|
XR := $A65E ; X Register
|
||||||
|
YR := $A65F ; Y Register
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; I/O Vectors (3 bytes each)
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
INVEC := $A660 ; Input Character
|
||||||
|
OUTVEC := $A663 ; Output Character
|
||||||
|
INSVEC := $A666 ; Input Status
|
||||||
|
URSVEC := $A669 ; Unrecognized Syntax
|
||||||
|
URCVEC := $A66C ; Unrecognized Command / Error
|
||||||
|
SCNVEC := $A66F ; Scan On-board Display
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; Trace and Interrupt Vectors (2 bytes each)
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
EXEVEC := $A672 ; Exec and Alternate InVec
|
||||||
|
TRCVEC := $A674 ; Trace
|
||||||
|
UBRKVC := $A676 ; User Break after Monitor
|
||||||
|
UIRQVC := $A678 ; User non-break IRQ after Monitor
|
||||||
|
NMIVEC := $A67A ; Non-Maskable Interrupt
|
||||||
|
RSTVEC := $A67C ; Reset
|
||||||
|
IRQVEC := $A67E ; Interrupt Request
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; I/O Registers
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
;
|
||||||
|
; 6532 (U27)
|
||||||
|
;
|
||||||
|
PADA := $A400 ; Keyboard / Display
|
||||||
|
P3DA := $A402 ; Serial I/O
|
||||||
|
DDPADA := $A401 ; Data-Direction Register for PADA
|
||||||
|
DDP3DA := $A403 ; Data-Direction Register for P3DA
|
||||||
|
WEDRTA := $A404 ; Write-Edge Detect Read Timer A
|
||||||
|
WEDRFA := $A405 ; Write-Edge Detect Read-Int Flags A
|
||||||
|
WEDRTB := $A406 ; Write-Edge Detect Read Timer B
|
||||||
|
WEDRFB := $A407 ; Write-Edge Detect Read-Int Flags B
|
||||||
|
TIM0001 := $A41C ; Timer / 1
|
||||||
|
TIM0008 := $A41D ; Timer / 8
|
||||||
|
TIM0064 := $A41E ; Timer / 64
|
||||||
|
TIM1024 := $A41F ; Timer / 1024
|
||||||
|
;
|
||||||
|
; 6522 (U25)
|
||||||
|
;
|
||||||
|
OR1A := $A001 ; Input / Output Register for 1A
|
||||||
|
DDR1A := $A003 ; Data-Direction Register for 1A
|
||||||
|
OR1B := $A000 ; Input / Output Register for 1B
|
||||||
|
DDR1B := $A002 ; Data-Direction Register for 1B
|
||||||
|
TIC1L := $A004 ;
|
||||||
|
TIC1H := $A005 ;
|
||||||
|
TIL1L := $A006 ;
|
||||||
|
TIL1H := $A007 ;
|
||||||
|
T2L1L := $A008 ;
|
||||||
|
T2C1L := $A008 ;
|
||||||
|
T2C1H := $A009 ;
|
||||||
|
SR1 := $A00A ;
|
||||||
|
ACR1 := $A00B ;
|
||||||
|
PCR1 := $A00C ;
|
||||||
|
IFR1 := $A00D ;
|
||||||
|
IER1 := $A00E ;
|
||||||
|
DR1A := $A00F ;
|
||||||
|
;
|
||||||
|
; 6522 (U28)
|
||||||
|
;
|
||||||
|
OR2A := $A801 ; Input / Output Register for 2A
|
||||||
|
DDR2A := $A803 ; Data-Direction Register for 2A
|
||||||
|
OR2B := $A800 ; Input / Output Register for 2B
|
||||||
|
DDR2B := $A802 ; Data-Direction Register for 2B
|
||||||
|
TIC2L := $A804 ;
|
||||||
|
TIC2H := $A805 ;
|
||||||
|
TIL2L := $A806 ;
|
||||||
|
TIL2H := $A807 ;
|
||||||
|
T2L2L := $A808 ;
|
||||||
|
T2C2L := $A808 ;
|
||||||
|
T2C2H := $A809 ;
|
||||||
|
SR2 := $A80A ;
|
||||||
|
ACR2 := $A80B ;
|
||||||
|
PCR2 := $A80C ;
|
||||||
|
IFR2 := $A80D ;
|
||||||
|
IER2 := $A80E ;
|
||||||
|
DR2A := $A80F ;
|
||||||
|
;
|
||||||
|
; 6522 (U29)
|
||||||
|
;
|
||||||
|
OR3A := $AC01 ; Write-Protect RAM, Debug On/Off, I/O-3A
|
||||||
|
DDR3A := $AC03 ; Data-Direction Register for 3A
|
||||||
|
OR3B := $AC00 ; Input / Output Register for 3B
|
||||||
|
DDR3B := $AC02 ; Data-Direction Register for 3B
|
||||||
|
TIC3L := $AC04 ;
|
||||||
|
TIC3H := $AC05 ;
|
||||||
|
TIL3L := $AC06 ;
|
||||||
|
TIL3H := $AC07 ;
|
||||||
|
T2L3L := $AC08 ;
|
||||||
|
T2C3L := $AC08 ;
|
||||||
|
T2C3H := $AC09 ;
|
||||||
|
SR3 := $AC0A ;
|
||||||
|
ACR3 := $AC0B ;
|
||||||
|
PCR3 := $AC0C ;
|
||||||
|
IFR3 := $AC0D ;
|
||||||
|
IER3 := $AC0E ;
|
||||||
|
DR3A := $AC0F ;
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
;
|
;
|
||||||
; Oric TELEMON definition
|
; Oric TELEMON definition
|
||||||
; TELEMON 2.4 & TELEMON 3.x
|
; TELEMON 2.4 & Orix
|
||||||
; For TELEMON 3.x check http://orix.oric.org
|
; For Orix check http://orix.oric.org
|
||||||
;
|
;
|
||||||
|
|
||||||
; ---------------------------------------------------------------------------
|
; ---------------------------------------------------------------------------
|
||||||
@@ -48,33 +48,33 @@ TR7 := $13
|
|||||||
|
|
||||||
DEFAFF := $14
|
DEFAFF := $14
|
||||||
|
|
||||||
IRQSVA := $21 ; Used to save A when a BRK call occurs
|
IRQSVA := $21 ; Used to save A when a BRK call occurs
|
||||||
IRQSVX := $22 ; Used to save X when a BRK call occurs
|
IRQSVX := $22 ; Used to save X when a BRK call occurs
|
||||||
IRQSVY := $23 ; Used to save Y when a BRK call occurs
|
IRQSVY := $23 ; Used to save Y when a BRK call occurs
|
||||||
IRQSVP := $24 ; Used to save P when a BRK call occurs
|
IRQSVP := $24 ; Used to save P when a BRK call occurs
|
||||||
|
|
||||||
ADSCR := $26
|
ADSCR := $26
|
||||||
SCRNB := $28 ; Id of the current window
|
SCRNB := $28 ; Id of the current window
|
||||||
|
|
||||||
ADKBD := $2A ; Address ASCII conversion table
|
ADKBD := $2A ; Address ASCII conversion table
|
||||||
|
|
||||||
|
|
||||||
PTR_READ_DEST := $2C ; Used for XFREAD and XWRITE only in TELEMON 3.x
|
PTR_READ_DEST := $2C ; Used for XFREAD and XWRITE only in Orix
|
||||||
|
|
||||||
ADCLK := $40 ; Address for clock display
|
ADCLK := $40 ; Address for clock display
|
||||||
TIMEUS := $42
|
TIMEUS := $42
|
||||||
TIMEUD := $44
|
TIMEUD := $44 ; Counter clock (1/10 of a second)
|
||||||
|
|
||||||
|
|
||||||
HRSX := $46
|
HRSX := $46
|
||||||
HRSY := $47
|
HRSY := $47
|
||||||
|
|
||||||
XLPRBI := $48 ; Printer flag (b7)
|
XLPRBI := $48 ; Printer flag (b7)
|
||||||
|
|
||||||
HRSX40 := $49
|
HRSX40 := $49
|
||||||
HRSX6 := $4A
|
HRSX6 := $4A
|
||||||
|
|
||||||
ADHRS := $4B ; Hires screen address (word)
|
ADHRS := $4B ; Hires screen address (word)
|
||||||
|
|
||||||
HRS1 := $4D
|
HRS1 := $4D
|
||||||
HRS2 := $4F
|
HRS2 := $4F
|
||||||
@@ -249,19 +249,22 @@ XHIRES = $1A
|
|||||||
XEFFHI = $1B ; Clear hires screen
|
XEFFHI = $1B ; Clear hires screen
|
||||||
XFILLM = $1C
|
XFILLM = $1C
|
||||||
XMINMA = $1F
|
XMINMA = $1F
|
||||||
XVARS = $24 ; Only in TELEMON 3.x, in TELEMON 2.4, it's XNOMFI ($24)
|
XVARS = $24 ; Only in Orix, in TELEMON 2.4, it's XNOMFI ($24)
|
||||||
XCRLF = $25 ; Jump a line and return to the beginning of the line
|
XCRLF = $25 ; Jump a line and return to the beginning of the line
|
||||||
XDECAY = $26
|
XDECAY = $26
|
||||||
XFREAD = $27 ; Only in TELEMON 3.x (bank 7 of Orix)
|
XFREAD = $27 ; Only in Orix
|
||||||
XBINDX = $28 ; Convert a number into hex and displays on channel 0
|
XBINDX = $28 ; Convert a number into hex and displays on channel 0
|
||||||
XDECIM = $29
|
XDECIM = $29
|
||||||
XHEXA = $2A ; Convert a number into hex
|
XHEXA = $2A ; Convert a number into hex
|
||||||
|
|
||||||
|
XMAINARGS = $2C ; Only available for Orix
|
||||||
|
|
||||||
XEDT = $2D ; Launch editor
|
XEDT = $2D ; Launch editor
|
||||||
XINSER = $2E
|
XINSER = $2E
|
||||||
|
XGETARGV = $2E ; Only available for Orix
|
||||||
|
|
||||||
XSCELG = $2F ; Search a line in editor mode
|
XSCELG = $2F ; Search a line in editor mode
|
||||||
XOPEN = $30 ; Only in TELEMON 3.x (bank 7 of Orix)
|
XOPEN = $30 ; Only in Orix
|
||||||
XECRPR = $33 ; Displays prompt
|
XECRPR = $33 ; Displays prompt
|
||||||
XCOSCR = $34 ; Switch off cursor
|
XCOSCR = $34 ; Switch off cursor
|
||||||
XCSSCR = $35 ; Switch on cursor
|
XCSSCR = $35 ; Switch on cursor
|
||||||
@@ -269,14 +272,17 @@ XSCRSE = $36
|
|||||||
XSCROH = $37 ; Scroll up text screen
|
XSCROH = $37 ; Scroll up text screen
|
||||||
XSCROB = $38 ; Scroll down text screen
|
XSCROB = $38 ; Scroll down text screen
|
||||||
XSCRNE = $39 ; Load charset from rom to ram
|
XSCRNE = $39 ; Load charset from rom to ram
|
||||||
XCLOSE = $3A ; Only in TELEMON 3.x close file (bank 7 of Orix)
|
XCLOSE = $3A ; Only in Orix close file
|
||||||
XFWRITE = $3B ; Only in TELEMON 3.x write file (bank 7 of Orix)
|
XFWRITE = $3B ; Only in Orix write file
|
||||||
|
|
||||||
; Clock primitive
|
; Clock primitive
|
||||||
XRECLK = $3C ; Reset clock
|
XRECLK = $3C ; Reset clock
|
||||||
XCLCL = $3D ; Close clock
|
XCLCL = $3D ; Close clock
|
||||||
XWRCLK = $3E ; Displays clock in the adress in A & Y registers
|
XWRCLK = $3E ; Displays clock in the address in A & Y registers
|
||||||
|
|
||||||
|
XFSEEK = $3F ; Only in Orix
|
||||||
|
|
||||||
|
; Sound primitives
|
||||||
XSONPS = $40 ; Send data to PSG register (14 values)
|
XSONPS = $40 ; Send data to PSG register (14 values)
|
||||||
XOUPS = $42 ; Send Oups sound into PSG
|
XOUPS = $42 ; Send Oups sound into PSG
|
||||||
XPLAY = $43 ; Play a sound
|
XPLAY = $43 ; Play a sound
|
||||||
@@ -284,10 +290,25 @@ XSOUND = $44
|
|||||||
XMUSIC = $45
|
XMUSIC = $45
|
||||||
XZAP = $46 ; Send Zap sound to PSG
|
XZAP = $46 ; Send Zap sound to PSG
|
||||||
XSHOOT = $47
|
XSHOOT = $47
|
||||||
XMKDIR = $4B ; Create a folder. Only available in TELEMON 3.x (bank 7 of Orix)
|
|
||||||
XRM = $4D ; Remove a folder or a file. Only available in TELEMON 3.x (bank 7 of Orix)
|
; Path Management
|
||||||
XFWR = $4E ; Put a char on the first screen. Only available in TELEMON 3.x (bank 7 of Orix)
|
XGETCWD = $48 ; Get current CWD
|
||||||
XGOKBD = $52
|
XPUTCWD = $49 ; Chdir
|
||||||
|
|
||||||
|
; File management
|
||||||
|
XMKDIR = $4B ; Create a folder. Only available in Orix
|
||||||
|
|
||||||
|
XHCHRS = $4C ; Hard copy hires
|
||||||
|
|
||||||
|
; File management
|
||||||
|
XRM = $4D ; Remove a folder or a file. Only available in Orix
|
||||||
|
|
||||||
|
XFWR = $4E ; Put a char on the first screen. Only available in Orix
|
||||||
|
|
||||||
|
; Keyboard primitives
|
||||||
|
XALLKB = $50 ; Read Keyboard, and populate KBDCOL
|
||||||
|
XKBDAS = $51 ; Ascii conversion
|
||||||
|
XGOKBD = $52 ; Swap keyboard type (Qwerty, French ...)
|
||||||
|
|
||||||
; Buffer management
|
; Buffer management
|
||||||
XECRBU = $54 ; Write A or AY in the buffer
|
XECRBU = $54 ; Write A or AY in the buffer
|
||||||
@@ -298,9 +319,30 @@ XINIBU = $58 ; Initialize the buffer X
|
|||||||
XDEFBU = $59 ; Reset all value of the buffer
|
XDEFBU = $59 ; Reset all value of the buffer
|
||||||
XBUSY = $5A ; Test if the buffer is empty
|
XBUSY = $5A ; Test if the buffer is empty
|
||||||
|
|
||||||
XMALLOC = $5B ; Only in TELEMON 3.x (bank 7 of Orix)
|
XMALLOC = $5B ; Only in Orix
|
||||||
XFREE = $62 ; Only in TELEMON 3.x (bank 7 of Orix)
|
|
||||||
XSOUT = $67 ; Send accumulator value (A) to RS232, available in TELEMON 2.4 & 3.x : if RS232 buffer is full, the Oric Telestrat freezes
|
; RS232 primitives
|
||||||
|
XSDUMP = $5C ; RS232 input dump
|
||||||
|
XCONSO = $5D ; Swap screen into RS232 terminal
|
||||||
|
XSLOAD = $5E ; Read a file from RS232
|
||||||
|
XSSAVE = $5F ; Write a file to RS232
|
||||||
|
|
||||||
|
; Minitel primitives
|
||||||
|
XMLOAD = $60 ; Read a file from Minitel
|
||||||
|
XMSAVE = $61 ; Write a file to Minitel
|
||||||
|
|
||||||
|
XFREE = $62 ; Only in Orix
|
||||||
|
|
||||||
|
XEXEC = $63 ; Only in Orix
|
||||||
|
|
||||||
|
; Next Minitel primitives
|
||||||
|
XWCXFI = $63 ; Wait connection
|
||||||
|
XLIGNE = $64 ;
|
||||||
|
XDECON = $65 ; Minitel disconnection
|
||||||
|
XMOUT = $66 ; Send a byte to minitel (from A)
|
||||||
|
|
||||||
|
XSOUT = $67 ; Send accumulator value (A) to RS232, available in TELEMON 2.4 : if RS232 buffer is full, the Oric Telestrat freezes
|
||||||
|
|
||||||
XHRSSE = $8C ; Set hires position cursor
|
XHRSSE = $8C ; Set hires position cursor
|
||||||
XDRAWA = $8D ; Draw a line absolute
|
XDRAWA = $8D ; Draw a line absolute
|
||||||
XDRAWR = $8E ; Draw a line (relative)
|
XDRAWR = $8E ; Draw a line (relative)
|
||||||
@@ -324,7 +366,7 @@ PWD_PTR = $00
|
|||||||
|
|
||||||
; ---------------------------------------------------------------------------
|
; ---------------------------------------------------------------------------
|
||||||
;
|
;
|
||||||
BUFTRV := $100
|
BUFTRV := $100
|
||||||
|
|
||||||
|
|
||||||
; ---------------------------------------------------------------------------
|
; ---------------------------------------------------------------------------
|
||||||
@@ -337,7 +379,7 @@ FLGTEL := $20D
|
|||||||
KOROM := $20E ; Used to compute the size of all rom bank. The result is store here. The value is in KB
|
KOROM := $20E ; Used to compute the size of all rom bank. The result is store here. The value is in KB
|
||||||
KORAM := $20F ; Used to compute the size of all ram bank. The result is store here. The value is in KB
|
KORAM := $20F ; Used to compute the size of all ram bank. The result is store here. The value is in KB
|
||||||
; Time management
|
; Time management
|
||||||
TIMED := $210
|
TIMED := $210 ; Clock (1/10 of seconds)
|
||||||
TIMES := $211
|
TIMES := $211
|
||||||
TIMEM := $212
|
TIMEM := $212
|
||||||
TIMEH := $213
|
TIMEH := $213
|
||||||
|
|||||||
@@ -66,3 +66,9 @@
|
|||||||
.global _clock_settime
|
.global _clock_settime
|
||||||
.global _localtime
|
.global _localtime
|
||||||
.global _mktime
|
.global _mktime
|
||||||
|
|
||||||
|
|
||||||
|
;------------------------------------------------------------------------------
|
||||||
|
; Constants
|
||||||
|
|
||||||
|
CLOCK_REALTIME = 0
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
;/* */
|
;/* */
|
||||||
;/* */
|
;/* */
|
||||||
;/* (C) 2003 Ullrich von Bassewitz */
|
;/* (C) 2003 Ullrich von Bassewitz */
|
||||||
;/* R<EFBFBD>merstrasse 52 */
|
;/* Roemerstrasse 52 */
|
||||||
;/* D-70794 Filderstadt */
|
;/* D-70794 Filderstadt */
|
||||||
;/* EMail: uz@cc65.org */
|
;/* EMail: uz@cc65.org */
|
||||||
;/* */
|
;/* */
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
;
|
;
|
||||||
; Vic20 generic definitions. Stolen mostly from c64.inc - Steve Schmidtke
|
; VIC-20 generic definitions. Stolen mostly from c64.inc -- Steve Schmidtke
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
||||||
; ---------------------------------------------------------------------------
|
; ---------------------------------------------------------------------------
|
||||||
; Zero page, Commodore stuff
|
; Zero page, Commodore stuff
|
||||||
|
|
||||||
VARTAB := $2D ; Pointer to start of BASIC variables
|
VARTAB := $2D ; Pointer to start of BASIC variables
|
||||||
MEMSIZE := $37 ; Pointer to highest BASIC RAM location (+1)
|
MEMSIZE := $37 ; Pointer to highest BASIC RAM location (+1)
|
||||||
TXTPTR := $7A ; Pointer into BASIC source code
|
TXTPTR := $7A ; Pointer into BASIC source code
|
||||||
|
STATUS := $90 ; Kernal I/O completion status
|
||||||
TIME := $A0 ; 60HZ clock
|
TIME := $A0 ; 60HZ clock
|
||||||
FNAM_LEN := $B7 ; Length of filename
|
FNAM_LEN := $B7 ; Length of filename
|
||||||
SECADR := $B9 ; Secondary address
|
SECADR := $B9 ; Secondary address
|
||||||
@@ -35,6 +35,8 @@ KBDREPEAT := $28a
|
|||||||
KBDREPEATRATE := $28b
|
KBDREPEATRATE := $28b
|
||||||
KBDREPEATDELAY := $28c
|
KBDREPEATDELAY := $28c
|
||||||
|
|
||||||
|
RSSTAT := $297 ; RS-232 device driver status
|
||||||
|
|
||||||
; ---------------------------------------------------------------------------
|
; ---------------------------------------------------------------------------
|
||||||
; Screen size
|
; Screen size
|
||||||
|
|
||||||
@@ -88,7 +90,7 @@ VIA1_T1LH := VIA1+$7 ; Timer 1 latch, high byte
|
|||||||
VIA1_T2CL := VIA1+$8 ; Timer 2, low byte
|
VIA1_T2CL := VIA1+$8 ; Timer 2, low byte
|
||||||
VIA1_T2CH := VIA1+$9 ; Timer 2, high byte
|
VIA1_T2CH := VIA1+$9 ; Timer 2, high byte
|
||||||
VIA1_SR := VIA1+$A ; Shift register
|
VIA1_SR := VIA1+$A ; Shift register
|
||||||
VIA1_CR := VIA1+$B ; Auxiliary control register
|
VIA1_ACR := VIA1+$B ; Auxiliary control register
|
||||||
VIA1_PCR := VIA1+$C ; Peripheral control register
|
VIA1_PCR := VIA1+$C ; Peripheral control register
|
||||||
VIA1_IFR := VIA1+$D ; Interrupt flag register
|
VIA1_IFR := VIA1+$D ; Interrupt flag register
|
||||||
VIA1_IER := VIA1+$E ; Interrupt enable register
|
VIA1_IER := VIA1+$E ; Interrupt enable register
|
||||||
@@ -110,7 +112,7 @@ VIA2_T1LH := VIA2+$7 ; Timer 1 latch, high byte
|
|||||||
VIA2_T2CL := VIA2+$8 ; Timer 2, low byte
|
VIA2_T2CL := VIA2+$8 ; Timer 2, low byte
|
||||||
VIA2_T2CH := VIA2+$9 ; Timer 2, high byte
|
VIA2_T2CH := VIA2+$9 ; Timer 2, high byte
|
||||||
VIA2_SR := VIA2+$A ; Shift register
|
VIA2_SR := VIA2+$A ; Shift register
|
||||||
VIA2_CR := VIA2+$B ; Auxiliary control register
|
VIA2_ACR := VIA2+$B ; Auxiliary control register
|
||||||
VIA2_PCR := VIA2+$C ; Peripheral control register
|
VIA2_PCR := VIA2+$C ; Peripheral control register
|
||||||
VIA2_IFR := VIA2+$D ; Interrupt flag register
|
VIA2_IFR := VIA2+$D ; Interrupt flag register
|
||||||
VIA2_IER := VIA2+$E ; Interrupt enable register
|
VIA2_IER := VIA2+$E ; Interrupt enable register
|
||||||
|
|||||||
@@ -17,20 +17,22 @@ MEMORY {
|
|||||||
MAIN: file = %O, define = yes, start = %S, size = __HIMEM__ - %S;
|
MAIN: file = %O, define = yes, start = %S, size = __HIMEM__ - %S;
|
||||||
BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__;
|
BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__;
|
||||||
LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__;
|
LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__;
|
||||||
|
LOW: file = "", define = yes, start = $0800, size = %S - $0800;
|
||||||
}
|
}
|
||||||
SEGMENTS {
|
SEGMENTS {
|
||||||
ZEROPAGE: load = ZP, type = zp;
|
ZEROPAGE: load = ZP, type = zp;
|
||||||
EXEHDR: load = HEADER, type = ro, optional = yes;
|
EXEHDR: load = HEADER, type = ro, optional = yes;
|
||||||
STARTUP: load = MAIN, type = ro;
|
STARTUP: load = MAIN, type = ro;
|
||||||
LOWCODE: load = MAIN, type = ro, optional = yes;
|
LOWCODE: load = MAIN, type = ro, optional = yes;
|
||||||
HGR: load = MAIN, type = rw, optional = yes, start = $2000;
|
HGR: load = MAIN, type = rw, start = $2000;
|
||||||
CODE: load = MAIN, type = ro start = $4000;
|
CODE: load = MAIN, type = ro start = $4000;
|
||||||
RODATA: load = MAIN, type = ro;
|
RODATA: load = MAIN, type = ro;
|
||||||
DATA: load = MAIN, type = rw;
|
DATA: load = MAIN, type = rw;
|
||||||
INIT: load = MAIN, type = rw;
|
INIT: load = MAIN, type = rw; # uninitialized, but reserves output space
|
||||||
ONCE: load = MAIN, type = ro, define = yes;
|
ONCE: load = MAIN, type = ro, define = yes;
|
||||||
LC: load = MAIN, run = LC, type = ro, optional = yes;
|
LC: load = MAIN, run = LC, type = ro, optional = yes;
|
||||||
BSS: load = BSS, type = bss, define = yes;
|
BSS: load = BSS, type = bss, define = yes;
|
||||||
|
LOWBSS: load = LOW, type = bss, optional = yes;
|
||||||
}
|
}
|
||||||
FEATURES {
|
FEATURES {
|
||||||
CONDES: type = constructor,
|
CONDES: type = constructor,
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ MEMORY {
|
|||||||
MAIN: file = %O, define = yes, start = %S + __OVERLAYSIZE__, size = __HIMEM__ - __OVERLAYSIZE__ - %S;
|
MAIN: file = %O, define = yes, start = %S + __OVERLAYSIZE__, size = __HIMEM__ - __OVERLAYSIZE__ - %S;
|
||||||
BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__;
|
BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__;
|
||||||
LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__;
|
LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__;
|
||||||
|
LOW: file = "", define = yes, start = $0800, size = %S - $0800;
|
||||||
OVL1: file = "%O.1", start = %S, size = __OVERLAYSIZE__;
|
OVL1: file = "%O.1", start = %S, size = __OVERLAYSIZE__;
|
||||||
OVL2: file = "%O.2", start = %S, size = __OVERLAYSIZE__;
|
OVL2: file = "%O.2", start = %S, size = __OVERLAYSIZE__;
|
||||||
OVL3: file = "%O.3", start = %S, size = __OVERLAYSIZE__;
|
OVL3: file = "%O.3", start = %S, size = __OVERLAYSIZE__;
|
||||||
@@ -43,10 +44,11 @@ SEGMENTS {
|
|||||||
CODE: load = MAIN, type = ro;
|
CODE: load = MAIN, type = ro;
|
||||||
RODATA: load = MAIN, type = ro;
|
RODATA: load = MAIN, type = ro;
|
||||||
DATA: load = MAIN, type = rw;
|
DATA: load = MAIN, type = rw;
|
||||||
INIT: load = MAIN, type = rw;
|
INIT: load = MAIN, type = rw; # uninitialized, but reserves output space
|
||||||
ONCE: load = MAIN, type = ro, define = yes;
|
ONCE: load = MAIN, type = ro, define = yes;
|
||||||
LC: load = MAIN, run = LC, type = ro, optional = yes;
|
LC: load = MAIN, run = LC, type = ro, optional = yes;
|
||||||
BSS: load = BSS, type = bss, define = yes;
|
BSS: load = BSS, type = bss, define = yes;
|
||||||
|
LOWBSS: load = LOW, type = bss, optional = yes;
|
||||||
OVERLAY1: load = OVL1, type = ro, define = yes, optional = yes;
|
OVERLAY1: load = OVL1, type = ro, define = yes, optional = yes;
|
||||||
OVERLAY2: load = OVL2, type = ro, define = yes, optional = yes;
|
OVERLAY2: load = OVL2, type = ro, define = yes, optional = yes;
|
||||||
OVERLAY3: load = OVL3, type = ro, define = yes, optional = yes;
|
OVERLAY3: load = OVL3, type = ro, define = yes, optional = yes;
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ MEMORY {
|
|||||||
MAIN: file = %O, define = yes, start = $2000, size = $BF00 - $2000;
|
MAIN: file = %O, define = yes, start = $2000, size = $BF00 - $2000;
|
||||||
BSS: file = "", start = __ONCE_RUN__, size = $BF00 - __STACKSIZE__ - __ONCE_RUN__;
|
BSS: file = "", start = __ONCE_RUN__, size = $BF00 - __STACKSIZE__ - __ONCE_RUN__;
|
||||||
LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__;
|
LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__;
|
||||||
|
LOW: file = "", define = yes, start = $0800, size = $2000 - $0800;
|
||||||
}
|
}
|
||||||
SEGMENTS {
|
SEGMENTS {
|
||||||
ZEROPAGE: load = ZP, type = zp;
|
ZEROPAGE: load = ZP, type = zp;
|
||||||
@@ -22,10 +23,11 @@ SEGMENTS {
|
|||||||
CODE: load = MAIN, type = ro;
|
CODE: load = MAIN, type = ro;
|
||||||
RODATA: load = MAIN, type = ro;
|
RODATA: load = MAIN, type = ro;
|
||||||
DATA: load = MAIN, type = rw;
|
DATA: load = MAIN, type = rw;
|
||||||
INIT: load = MAIN, type = rw;
|
INIT: load = MAIN, type = rw; # uninitialized, but reserves output space
|
||||||
ONCE: load = MAIN, type = ro, define = yes;
|
ONCE: load = MAIN, type = ro, define = yes;
|
||||||
LC: load = MAIN, run = LC, type = ro, optional = yes;
|
LC: load = MAIN, run = LC, type = ro, optional = yes;
|
||||||
BSS: load = BSS, type = bss, define = yes;
|
BSS: load = BSS, type = bss, define = yes;
|
||||||
|
LOWBSS: load = LOW, type = bss, optional = yes;
|
||||||
}
|
}
|
||||||
FEATURES {
|
FEATURES {
|
||||||
CONDES: type = constructor,
|
CONDES: type = constructor,
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ MEMORY {
|
|||||||
MAIN: file = %O, define = yes, start = %S, size = __HIMEM__ - %S;
|
MAIN: file = %O, define = yes, start = %S, size = __HIMEM__ - %S;
|
||||||
BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__;
|
BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__;
|
||||||
LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__;
|
LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__;
|
||||||
|
LOW: file = "", define = yes, start = $0800, size = %S - $0800;
|
||||||
}
|
}
|
||||||
SEGMENTS {
|
SEGMENTS {
|
||||||
ZEROPAGE: load = ZP, type = zp;
|
ZEROPAGE: load = ZP, type = zp;
|
||||||
@@ -26,10 +27,11 @@ SEGMENTS {
|
|||||||
CODE: load = MAIN, type = ro;
|
CODE: load = MAIN, type = ro;
|
||||||
RODATA: load = MAIN, type = ro;
|
RODATA: load = MAIN, type = ro;
|
||||||
DATA: load = MAIN, type = rw;
|
DATA: load = MAIN, type = rw;
|
||||||
INIT: load = MAIN, type = rw;
|
INIT: load = MAIN, type = rw; # uninitialized, but reserves output space
|
||||||
ONCE: load = MAIN, type = ro, define = yes;
|
ONCE: load = MAIN, type = ro, define = yes;
|
||||||
LC: load = MAIN, run = LC, type = ro, optional = yes;
|
LC: load = MAIN, run = LC, type = ro, optional = yes;
|
||||||
BSS: load = BSS, type = bss, define = yes;
|
BSS: load = BSS, type = bss, define = yes;
|
||||||
|
LOWBSS: load = LOW, type = bss, optional = yes;
|
||||||
}
|
}
|
||||||
FEATURES {
|
FEATURES {
|
||||||
CONDES: type = constructor,
|
CONDES: type = constructor,
|
||||||
|
|||||||
@@ -17,20 +17,22 @@ MEMORY {
|
|||||||
MAIN: file = %O, define = yes, start = %S, size = __HIMEM__ - %S;
|
MAIN: file = %O, define = yes, start = %S, size = __HIMEM__ - %S;
|
||||||
BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__;
|
BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__;
|
||||||
LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__;
|
LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__;
|
||||||
|
LOW: file = "", define = yes, start = $0800, size = %S - $0800;
|
||||||
}
|
}
|
||||||
SEGMENTS {
|
SEGMENTS {
|
||||||
ZEROPAGE: load = ZP, type = zp;
|
ZEROPAGE: load = ZP, type = zp;
|
||||||
EXEHDR: load = HEADER, type = ro, optional = yes;
|
EXEHDR: load = HEADER, type = ro, optional = yes;
|
||||||
STARTUP: load = MAIN, type = ro;
|
STARTUP: load = MAIN, type = ro;
|
||||||
LOWCODE: load = MAIN, type = ro, optional = yes;
|
LOWCODE: load = MAIN, type = ro, optional = yes;
|
||||||
HGR: load = MAIN, type = rw, optional = yes, start = $2000;
|
HGR: load = MAIN, type = rw, start = $2000;
|
||||||
CODE: load = MAIN, type = ro start = $4000;
|
CODE: load = MAIN, type = ro start = $4000;
|
||||||
RODATA: load = MAIN, type = ro;
|
RODATA: load = MAIN, type = ro;
|
||||||
DATA: load = MAIN, type = rw;
|
DATA: load = MAIN, type = rw;
|
||||||
INIT: load = MAIN, type = rw;
|
INIT: load = MAIN, type = rw; # uninitialized, but reserves output space
|
||||||
ONCE: load = MAIN, type = ro, define = yes;
|
ONCE: load = MAIN, type = ro, define = yes;
|
||||||
LC: load = MAIN, run = LC, type = ro, optional = yes;
|
LC: load = MAIN, run = LC, type = ro, optional = yes;
|
||||||
BSS: load = BSS, type = bss, define = yes;
|
BSS: load = BSS, type = bss, define = yes;
|
||||||
|
LOWBSS: load = LOW, type = bss, optional = yes;
|
||||||
}
|
}
|
||||||
FEATURES {
|
FEATURES {
|
||||||
CONDES: type = constructor,
|
CONDES: type = constructor,
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ MEMORY {
|
|||||||
MAIN: file = %O, define = yes, start = %S + __OVERLAYSIZE__, size = __HIMEM__ - __OVERLAYSIZE__ - %S;
|
MAIN: file = %O, define = yes, start = %S + __OVERLAYSIZE__, size = __HIMEM__ - __OVERLAYSIZE__ - %S;
|
||||||
BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__;
|
BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__;
|
||||||
LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__;
|
LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__;
|
||||||
|
LOW: file = "", define = yes, start = $0800, size = %S - $0800;
|
||||||
OVL1: file = "%O.1", start = %S, size = __OVERLAYSIZE__;
|
OVL1: file = "%O.1", start = %S, size = __OVERLAYSIZE__;
|
||||||
OVL2: file = "%O.2", start = %S, size = __OVERLAYSIZE__;
|
OVL2: file = "%O.2", start = %S, size = __OVERLAYSIZE__;
|
||||||
OVL3: file = "%O.3", start = %S, size = __OVERLAYSIZE__;
|
OVL3: file = "%O.3", start = %S, size = __OVERLAYSIZE__;
|
||||||
@@ -43,10 +44,11 @@ SEGMENTS {
|
|||||||
CODE: load = MAIN, type = ro;
|
CODE: load = MAIN, type = ro;
|
||||||
RODATA: load = MAIN, type = ro;
|
RODATA: load = MAIN, type = ro;
|
||||||
DATA: load = MAIN, type = rw;
|
DATA: load = MAIN, type = rw;
|
||||||
INIT: load = MAIN, type = rw;
|
INIT: load = MAIN, type = rw; # uninitialized, but reserves output space
|
||||||
ONCE: load = MAIN, type = ro, define = yes;
|
ONCE: load = MAIN, type = ro, define = yes;
|
||||||
LC: load = MAIN, run = LC, type = ro, optional = yes;
|
LC: load = MAIN, run = LC, type = ro, optional = yes;
|
||||||
BSS: load = BSS, type = bss, define = yes;
|
BSS: load = BSS, type = bss, define = yes;
|
||||||
|
LOWBSS: load = LOW, type = bss, optional = yes;
|
||||||
OVERLAY1: load = OVL1, type = ro, define = yes, optional = yes;
|
OVERLAY1: load = OVL1, type = ro, define = yes, optional = yes;
|
||||||
OVERLAY2: load = OVL2, type = ro, define = yes, optional = yes;
|
OVERLAY2: load = OVL2, type = ro, define = yes, optional = yes;
|
||||||
OVERLAY3: load = OVL3, type = ro, define = yes, optional = yes;
|
OVERLAY3: load = OVL3, type = ro, define = yes, optional = yes;
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ MEMORY {
|
|||||||
MAIN: file = %O, define = yes, start = $2000, size = $BF00 - $2000;
|
MAIN: file = %O, define = yes, start = $2000, size = $BF00 - $2000;
|
||||||
BSS: file = "", start = __ONCE_RUN__, size = $BF00 - __STACKSIZE__ - __ONCE_RUN__;
|
BSS: file = "", start = __ONCE_RUN__, size = $BF00 - __STACKSIZE__ - __ONCE_RUN__;
|
||||||
LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__;
|
LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__;
|
||||||
|
LOW: file = "", define = yes, start = $0800, size = $2000 - $0800;
|
||||||
}
|
}
|
||||||
SEGMENTS {
|
SEGMENTS {
|
||||||
ZEROPAGE: load = ZP, type = zp;
|
ZEROPAGE: load = ZP, type = zp;
|
||||||
@@ -22,10 +23,11 @@ SEGMENTS {
|
|||||||
CODE: load = MAIN, type = ro;
|
CODE: load = MAIN, type = ro;
|
||||||
RODATA: load = MAIN, type = ro;
|
RODATA: load = MAIN, type = ro;
|
||||||
DATA: load = MAIN, type = rw;
|
DATA: load = MAIN, type = rw;
|
||||||
INIT: load = MAIN, type = rw;
|
INIT: load = MAIN, type = rw; # uninitialized, but reserves output space
|
||||||
ONCE: load = MAIN, type = ro, define = yes;
|
ONCE: load = MAIN, type = ro, define = yes;
|
||||||
LC: load = MAIN, run = LC, type = ro, optional = yes;
|
LC: load = MAIN, run = LC, type = ro, optional = yes;
|
||||||
BSS: load = BSS, type = bss, define = yes;
|
BSS: load = BSS, type = bss, define = yes;
|
||||||
|
LOWBSS: load = LOW, type = bss, optional = yes;
|
||||||
}
|
}
|
||||||
FEATURES {
|
FEATURES {
|
||||||
CONDES: type = constructor,
|
CONDES: type = constructor,
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ MEMORY {
|
|||||||
MAIN: file = %O, define = yes, start = %S, size = __HIMEM__ - %S;
|
MAIN: file = %O, define = yes, start = %S, size = __HIMEM__ - %S;
|
||||||
BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__;
|
BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__;
|
||||||
LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__;
|
LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__;
|
||||||
|
LOW: file = "", define = yes, start = $0800, size = %S - $0800;
|
||||||
}
|
}
|
||||||
SEGMENTS {
|
SEGMENTS {
|
||||||
ZEROPAGE: load = ZP, type = zp;
|
ZEROPAGE: load = ZP, type = zp;
|
||||||
@@ -26,10 +27,11 @@ SEGMENTS {
|
|||||||
CODE: load = MAIN, type = ro;
|
CODE: load = MAIN, type = ro;
|
||||||
RODATA: load = MAIN, type = ro;
|
RODATA: load = MAIN, type = ro;
|
||||||
DATA: load = MAIN, type = rw;
|
DATA: load = MAIN, type = rw;
|
||||||
INIT: load = MAIN, type = rw;
|
INIT: load = MAIN, type = rw; # uninitialized, but reserves output space
|
||||||
ONCE: load = MAIN, type = ro, define = yes;
|
ONCE: load = MAIN, type = ro, define = yes;
|
||||||
LC: load = MAIN, run = LC, type = ro, optional = yes;
|
LC: load = MAIN, run = LC, type = ro, optional = yes;
|
||||||
BSS: load = BSS, type = bss, define = yes;
|
BSS: load = BSS, type = bss, define = yes;
|
||||||
|
LOWBSS: load = LOW, type = bss, optional = yes;
|
||||||
}
|
}
|
||||||
FEATURES {
|
FEATURES {
|
||||||
CONDES: type = constructor,
|
CONDES: type = constructor,
|
||||||
|
|||||||
@@ -20,5 +20,6 @@ SEGMENTS {
|
|||||||
CODE: load = MAIN, type = rw, define = yes;
|
CODE: load = MAIN, type = rw, define = yes;
|
||||||
RODATA: load = MAIN, type = ro optional = yes;
|
RODATA: load = MAIN, type = ro optional = yes;
|
||||||
DATA: load = MAIN, type = rw optional = yes;
|
DATA: load = MAIN, type = rw optional = yes;
|
||||||
|
INIT: load = MAIN, type = bss, optional = yes, define = yes;
|
||||||
BSS: load = MAIN, type = bss, optional = yes, define = yes;
|
BSS: load = MAIN, type = bss, optional = yes, define = yes;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ SEGMENTS {
|
|||||||
CODE: load = MAIN, type = rw, define = yes;
|
CODE: load = MAIN, type = rw, define = yes;
|
||||||
RODATA: load = MAIN, type = ro optional = yes;
|
RODATA: load = MAIN, type = ro optional = yes;
|
||||||
DATA: load = MAIN, type = rw optional = yes;
|
DATA: load = MAIN, type = rw optional = yes;
|
||||||
|
INIT: load = MAIN, type = bss, optional = yes, define = yes;
|
||||||
BSS: load = MAIN, type = bss, optional = yes, define = yes;
|
BSS: load = MAIN, type = bss, optional = yes, define = yes;
|
||||||
AUTOSTRT: load = TRAILER, type = ro, optional = yes;
|
AUTOSTRT: load = TRAILER, type = ro, optional = yes;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,8 +22,8 @@ SEGMENTS {
|
|||||||
CODE: load = MAIN, type = ro, define = yes;
|
CODE: load = MAIN, type = ro, define = yes;
|
||||||
RODATA: load = MAIN, type = ro, optional = yes;
|
RODATA: load = MAIN, type = ro, optional = yes;
|
||||||
DATA: load = MAIN, type = rw, optional = yes;
|
DATA: load = MAIN, type = rw, optional = yes;
|
||||||
|
INIT: load = MAIN, type = bss, define = yes, optional = yes;
|
||||||
BSS: load = MAIN, type = bss, define = yes, optional = yes;
|
BSS: load = MAIN, type = bss, define = yes, optional = yes;
|
||||||
INIT: load = MAIN, type = bss, optional = yes;
|
|
||||||
}
|
}
|
||||||
FEATURES {
|
FEATURES {
|
||||||
CONDES: type = constructor,
|
CONDES: type = constructor,
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ SEGMENTS {
|
|||||||
CODE: load = MAIN, type = ro, define = yes;
|
CODE: load = MAIN, type = ro, define = yes;
|
||||||
RODATA: load = MAIN, type = ro;
|
RODATA: load = MAIN, type = ro;
|
||||||
DATA: load = MAIN, type = rw;
|
DATA: load = MAIN, type = rw;
|
||||||
INIT: load = MAIN, type = rw, optional = yes;
|
INIT: load = MAIN, type = bss, define = yes, optional = yes;
|
||||||
BSS: load = MAIN, type = bss, define = yes;
|
BSS: load = MAIN, type = bss, define = yes;
|
||||||
AUTOSTRT: load = TRAILER, type = ro;
|
AUTOSTRT: load = TRAILER, type = ro;
|
||||||
OVERLAY1: load = OVL1, type = ro, define = yes, optional = yes;
|
OVERLAY1: load = OVL1, type = ro, define = yes, optional = yes;
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ SEGMENTS {
|
|||||||
CODE: load = MAIN, type = ro, define = yes;
|
CODE: load = MAIN, type = ro, define = yes;
|
||||||
RODATA: load = MAIN, type = ro;
|
RODATA: load = MAIN, type = ro;
|
||||||
DATA: load = MAIN, type = rw;
|
DATA: load = MAIN, type = rw;
|
||||||
INIT: load = MAIN, type = rw, optional = yes;
|
INIT: load = MAIN, type = bss, define = yes, optional = yes;
|
||||||
BSS: load = MAIN, type = bss, define = yes;
|
BSS: load = MAIN, type = bss, define = yes;
|
||||||
}
|
}
|
||||||
FEATURES {
|
FEATURES {
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ SEGMENTS {
|
|||||||
CODE: load = MAIN, type = ro, define = yes;
|
CODE: load = MAIN, type = ro, define = yes;
|
||||||
RODATA: load = MAIN, type = ro;
|
RODATA: load = MAIN, type = ro;
|
||||||
DATA: load = MAIN, type = rw;
|
DATA: load = MAIN, type = rw;
|
||||||
INIT: load = MAIN, type = rw, optional = yes;
|
INIT: load = MAIN, type = bss, define = yes, optional = yes;
|
||||||
BSS: load = MAIN, type = bss, define = yes;
|
BSS: load = MAIN, type = bss, define = yes;
|
||||||
AUTOSTRT: load = TRAILER, type = ro;
|
AUTOSTRT: load = TRAILER, type = ro;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ MEMORY {
|
|||||||
SEGMENTS {
|
SEGMENTS {
|
||||||
ZEROPAGE: load = ZP, type = zp, optional = yes;
|
ZEROPAGE: load = ZP, type = zp, optional = yes;
|
||||||
EXTZP: load = ZP, type = zp, optional = yes;
|
EXTZP: load = ZP, type = zp, optional = yes;
|
||||||
DLIST: load = ROM , type = ro, define = yes, optional = yes;
|
DLIST: load = ROM, type = ro, define = yes, optional = yes;
|
||||||
STARTUP: load = ROM, type = ro, define = yes, optional = yes;
|
STARTUP: load = ROM, type = ro, define = yes, optional = yes;
|
||||||
LOWCODE: load = ROM, type = ro, define = yes, optional = yes;
|
LOWCODE: load = ROM, type = ro, define = yes, optional = yes;
|
||||||
ONCE: load = ROM, type = ro, optional = yes;
|
ONCE: load = ROM, type = ro, optional = yes;
|
||||||
|
|||||||
68
cfg/atari7800.cfg
Normal file
68
cfg/atari7800.cfg
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
# Atari VCS 7800 linker configuration file for cc65
|
||||||
|
# In order to add the a78 header to the build you can add
|
||||||
|
# "--force-import __EXEHDR__" to the command line
|
||||||
|
|
||||||
|
SYMBOLS {
|
||||||
|
__STACKSIZE__: type = weak, value = $0600; # C stack
|
||||||
|
__CARTSIZE__: type = weak, value = $8000;
|
||||||
|
__VEC_BOTTOM__: value = $fffa, type = export;
|
||||||
|
__VEC_SIZE__: value = $6, type = export;
|
||||||
|
__ENCRYPT_BOTTOM__: value = $ff7a, type = export;
|
||||||
|
__ENCRYPT_SIZE__: value = $80, type = export;
|
||||||
|
__MEMORY_TOP__: value = __ENCRYPT_BOTTOM__, type = export;
|
||||||
|
__INIT_SIZE__: value = 156, type = export;
|
||||||
|
__MEMORY_INIT__: value = __MEMORY_TOP__ - __INIT_SIZE__, type = export;
|
||||||
|
__MEMORY_BOTTOM__: value = $10000 - __CARTSIZE__, type = weak;
|
||||||
|
__FREE_ROM_SIZE__: value = __MEMORY_INIT__ - __MEMORY_BOTTOM__, type = export;
|
||||||
|
}
|
||||||
|
|
||||||
|
MEMORY {
|
||||||
|
ZP: file = "", define = yes, start = $0040, size = $00C0, type = rw;
|
||||||
|
SP: file = "", define = yes, start = $0140, size = $00C0, type = rw;
|
||||||
|
RAM1: file = "", define = yes, start = $1800, size = $0840, type = rw;
|
||||||
|
RAM2: file = "", define = yes, start = $2100, size = $0040, type = rw;
|
||||||
|
RAM3: file = "", define = yes, start = $2200, size = $0600, type = rw;
|
||||||
|
# For emulators you also need a header file
|
||||||
|
HEADER: file = %O, start = $0000, size = 128;
|
||||||
|
# "Normal" cartridge rom. Multiple banks arent supported
|
||||||
|
# by this script. You may change the rom size, but keep
|
||||||
|
# two things in mind:
|
||||||
|
# - start must be a multiple of $1000
|
||||||
|
# - ROM must end at $ff79
|
||||||
|
ROM: file = %O, define = yes, start = __MEMORY_BOTTOM__, size = __FREE_ROM_SIZE__, type = ro, fill = yes, fillval = $ff;
|
||||||
|
ROMS: file = %O, define = yes, start = __MEMORY_INIT__, size = __INIT_SIZE__, type = ro, fill = yes, fillval = $ff;
|
||||||
|
# Encryption stuff
|
||||||
|
ROME: file = %O, start = __ENCRYPT_BOTTOM__, size = __ENCRYPT_SIZE__, type = ro, fill = yes, fillval = $ff;
|
||||||
|
# Interrupt vectors
|
||||||
|
ROMV: file = %O, start = __VEC_BOTTOM__, size = __VEC_SIZE__, type = ro, fill = yes, fillval = $ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
SEGMENTS {
|
||||||
|
ZEROPAGE: load = ZP, type = zp;
|
||||||
|
EXTZP: load = ZP, type = zp;
|
||||||
|
EXEHDR: load = HEADER, type = ro, optional = yes;
|
||||||
|
STARTUP: load = ROMS, type = ro, define = yes;
|
||||||
|
ONCE: load = ROMS, type = ro, define = yes;
|
||||||
|
CODE: load = ROM, type = ro, define = yes;
|
||||||
|
RODATA: load = ROM, type = ro, define = yes, align = 256;
|
||||||
|
DATA: load = ROM, run = RAM1, type = rw, define = yes;
|
||||||
|
BSS: load = RAM1, type = bss, define = yes;
|
||||||
|
VECTORS: load = ROMV, type = ro, define = yes;
|
||||||
|
ENCRYPTION: load = ROME, type = ro define = yes;
|
||||||
|
}
|
||||||
|
|
||||||
|
FEATURES {
|
||||||
|
CONDES: type = constructor,
|
||||||
|
label = __CONSTRUCTOR_TABLE__,
|
||||||
|
count = __CONSTRUCTOR_COUNT__,
|
||||||
|
segment = ONCE;
|
||||||
|
CONDES: type = destructor,
|
||||||
|
label = __DESTRUCTOR_TABLE__,
|
||||||
|
count = __DESTRUCTOR_COUNT__,
|
||||||
|
segment = RODATA;
|
||||||
|
CONDES: type = interruptor,
|
||||||
|
label = __INTERRUPTOR_TABLE__,
|
||||||
|
count = __INTERRUPTOR_COUNT__,
|
||||||
|
segment = RODATA,
|
||||||
|
import = __CALLIRQ__;
|
||||||
|
}
|
||||||
@@ -8,39 +8,40 @@ FEATURES {
|
|||||||
}
|
}
|
||||||
SYMBOLS {
|
SYMBOLS {
|
||||||
__EXEHDR__: type = import;
|
__EXEHDR__: type = import;
|
||||||
__SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk
|
__SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk
|
||||||
__AUTOSTART__: type = import; # force inclusion of autostart "trailer"
|
__AUTOSTART__: type = import; # force inclusion of autostart "trailer"
|
||||||
__STACKSIZE__: type = weak, value = $0800; # 2k stack
|
__STACKSIZE__: type = weak, value = $0800; # 2k stack
|
||||||
|
__CHARGENSIZE__: type = weak, value = $0400;
|
||||||
__STARTADDRESS__: type = export, value = %S;
|
__STARTADDRESS__: type = export, value = %S;
|
||||||
}
|
}
|
||||||
MEMORY {
|
MEMORY {
|
||||||
ZP: file = "", define = yes, start = $0082, size = $007E;
|
ZP: file = "", define = yes, start = $0082, size = $007E;
|
||||||
|
|
||||||
# just $FFFF
|
# just $FFFF
|
||||||
HEADER: file = %O, start = $0000, size = $0002;
|
HEADER: file = %O, start = $0000, size = $0002;
|
||||||
|
|
||||||
# "system check" load chunk
|
# "system check" load chunk
|
||||||
SYSCHKHDR: file = %O, start = $0000, size = $0004;
|
SYSCHKHDR: file = %O, start = $0000, size = $0004;
|
||||||
SYSCHKCHNK: file = %O, start = $2E00, size = $0300;
|
SYSCHKCHNK: file = %O, start = $2E00, size = $0300;
|
||||||
SYSCHKTRL: file = %O, start = $0000, size = $0006;
|
SYSCHKTRL: file = %O, start = $0000, size = $0006;
|
||||||
|
|
||||||
# "shadow RAM preparation" load chunk
|
# "shadow RAM preparation" load chunk
|
||||||
SRPREPHDR: file = %O, start = $0000, size = $0004;
|
SRPREPHDR: file = %O, start = $0000, size = $0004;
|
||||||
SRPREPCHNK: file = %O, define = yes, start = %S, size = $7C20 - %S - $07FF; # $07FF: space for temp. chargen buffer, 1K aligned
|
SRPREPCHNK: file = %O, define = yes, start = %S, size = $7C20 - %S - $07FF; # $07FF: space for temp. chargen buffer, 1K aligned
|
||||||
SRPREPTRL: file = %O, start = $0000, size = $0006;
|
SRPREPTRL: file = %O, start = $0000, size = $0006;
|
||||||
|
|
||||||
# "main program" load chunk
|
# "main program" load chunk
|
||||||
MAINHDR: file = %O, start = $0000, size = $0004;
|
MAINHDR: file = %O, start = $0000, size = $0004;
|
||||||
MAIN: file = %O, define = yes, start = %S + __LOWBSS_SIZE__, size = $D000 - __STACKSIZE__ - %S - __LOWBSS_SIZE__;
|
MAIN: file = %O, define = yes, start = %S + __LOWBSS_SIZE__, size = $D000 - __STACKSIZE__ - %S - __LOWBSS_SIZE__;
|
||||||
|
|
||||||
# defines entry point into program
|
# defines entry point into program
|
||||||
TRAILER: file = %O, start = $0000, size = $0006;
|
TRAILER: file = %O, start = $0000, size = $0006;
|
||||||
|
|
||||||
# address of relocated character generator
|
# address of relocated character generator
|
||||||
CHARGEN: file = "", define = yes, start = $D800, size = $0400;
|
CHARGEN: file = "", define = yes, start = $D800, size = __CHARGENSIZE__;
|
||||||
|
|
||||||
# memory beneath the ROM
|
# memory beneath the ROM
|
||||||
HIDDEN_RAM: file = "", define = yes, start = $DC00, size = $FFFA - $DC00;
|
HIDDEN_RAM: file = "", define = yes, start = $D800 + __CHARGENSIZE__, size = $FFFA - $D800 - __CHARGENSIZE__;
|
||||||
}
|
}
|
||||||
SEGMENTS {
|
SEGMENTS {
|
||||||
ZEROPAGE: load = ZP, type = zp;
|
ZEROPAGE: load = ZP, type = zp;
|
||||||
@@ -53,7 +54,7 @@ SEGMENTS {
|
|||||||
SYSCHKTRL: load = SYSCHKTRL, type = ro, optional = yes;
|
SYSCHKTRL: load = SYSCHKTRL, type = ro, optional = yes;
|
||||||
|
|
||||||
SRPREPHDR: load = SRPREPHDR, type = ro;
|
SRPREPHDR: load = SRPREPHDR, type = ro;
|
||||||
LOWBSS: load = SRPREPCHNK, type = bss, define = yes; # shared btw. SRPREPCHNK and RAM, not zero initialized
|
LOWBSS: load = SRPREPCHNK, type = bss, define = yes; # shared btw. SRPREPCHNK and MAIN, not zero initialized
|
||||||
SRPREP: load = SRPREPCHNK, type = rw, define = yes;
|
SRPREP: load = SRPREPCHNK, type = rw, define = yes;
|
||||||
SHADOW_RAM: load = SRPREPCHNK, run = HIDDEN_RAM, type = rw, define = yes, optional = yes;
|
SHADOW_RAM: load = SRPREPCHNK, run = HIDDEN_RAM, type = rw, define = yes, optional = yes;
|
||||||
SHADOW_RAM2: load = SRPREPCHNK, run = HIDDEN_RAM, type = rw, define = yes, optional = yes;
|
SHADOW_RAM2: load = SRPREPCHNK, run = HIDDEN_RAM, type = rw, define = yes, optional = yes;
|
||||||
@@ -66,7 +67,7 @@ SEGMENTS {
|
|||||||
CODE: load = MAIN, type = ro, define = yes;
|
CODE: load = MAIN, type = ro, define = yes;
|
||||||
RODATA: load = MAIN, type = ro;
|
RODATA: load = MAIN, type = ro;
|
||||||
DATA: load = MAIN, type = rw;
|
DATA: load = MAIN, type = rw;
|
||||||
INIT: load = MAIN, type = rw, optional = yes;
|
INIT: load = MAIN, type = bss, define = yes, optional = yes;
|
||||||
BSS: load = MAIN, type = bss, define = yes;
|
BSS: load = MAIN, type = bss, define = yes;
|
||||||
AUTOSTRT: load = TRAILER, type = ro;
|
AUTOSTRT: load = TRAILER, type = ro;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,44 +3,45 @@ FEATURES {
|
|||||||
}
|
}
|
||||||
SYMBOLS {
|
SYMBOLS {
|
||||||
__EXEHDR__: type = import;
|
__EXEHDR__: type = import;
|
||||||
__SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk
|
__SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk
|
||||||
__AUTOSTART__: type = import; # force inclusion of autostart "trailer"
|
__AUTOSTART__: type = import; # force inclusion of autostart "trailer"
|
||||||
__STACKSIZE__: type = weak, value = $0800; # 2k stack
|
__STACKSIZE__: type = weak, value = $0800; # 2k stack
|
||||||
__OVERLAYSIZE__: type = weak, value = $1000; # 4k overlay
|
__CHARGENSIZE__: type = weak, value = $0400;
|
||||||
|
__OVERLAYSIZE__: type = weak, value = $1000; # 4k overlay
|
||||||
__STARTADDRESS__: type = export, value = %S;
|
__STARTADDRESS__: type = export, value = %S;
|
||||||
}
|
}
|
||||||
MEMORY {
|
MEMORY {
|
||||||
ZP: file = "", define = yes, start = $0082, size = $007E;
|
ZP: file = "", define = yes, start = $0082, size = $007E;
|
||||||
|
|
||||||
# just $FFFF
|
# just $FFFF
|
||||||
HEADER: file = %O, start = $0000, size = $0002;
|
HEADER: file = %O, start = $0000, size = $0002;
|
||||||
|
|
||||||
# "system check" load chunk
|
# "system check" load chunk
|
||||||
SYSCHKHDR: file = %O, start = $0000, size = $0004;
|
SYSCHKHDR: file = %O, start = $0000, size = $0004;
|
||||||
SYSCHKCHNK: file = %O, start = $2E00, size = $0300;
|
SYSCHKCHNK: file = %O, start = $2E00, size = $0300;
|
||||||
SYSCHKTRL: file = %O, start = $0000, size = $0006;
|
SYSCHKTRL: file = %O, start = $0000, size = $0006;
|
||||||
|
|
||||||
# "shadow RAM preparation" load chunk
|
# "shadow RAM preparation" load chunk
|
||||||
SRPREPHDR: file = %O, start = $0000, size = $0004;
|
SRPREPHDR: file = %O, start = $0000, size = $0004;
|
||||||
SRPREPCHNK: file = %O, define = yes, start = %S + __OVERLAYSIZE__, size = $7C20 - %S - __OVERLAYSIZE__ - $07FF; # $07FF: space for temp. chargen buffer, 1K aligned
|
SRPREPCHNK: file = %O, define = yes, start = %S + __OVERLAYSIZE__, size = $7C20 - %S - __OVERLAYSIZE__ - $07FF; # $07FF: space for temp. chargen buffer, 1K aligned
|
||||||
SRPREPTRL: file = %O, start = $0000, size = $0006;
|
SRPREPTRL: file = %O, start = $0000, size = $0006;
|
||||||
|
|
||||||
# "main program" load chunk
|
# "main program" load chunk
|
||||||
MAINHDR: file = %O, start = $0000, size = $0004;
|
MAINHDR: file = %O, start = $0000, size = $0004;
|
||||||
MAIN: file = %O, define = yes, start = %S + __OVERLAYSIZE__ +
|
MAIN: file = %O, define = yes, start = %S + __OVERLAYSIZE__ +
|
||||||
__LOWBSS_SIZE__, size = $D000 - __STACKSIZE__ - %S - __OVERLAYSIZE__ - __LOWBSS_SIZE__;
|
__LOWBSS_SIZE__, size = $D000 - __STACKSIZE__ - %S - __OVERLAYSIZE__ - __LOWBSS_SIZE__;
|
||||||
|
|
||||||
# defines entry point into program
|
# defines entry point into program
|
||||||
TRAILER: file = %O, start = $0000, size = $0006;
|
TRAILER: file = %O, start = $0000, size = $0006;
|
||||||
|
|
||||||
# memory beneath the ROM preceeding the character generator
|
# memory beneath the ROM preceeding the character generator
|
||||||
HIDDEN_RAM2: file = "", define = yes, start = $D800, size = $0800;
|
HIDDEN_RAM2: file = "", define = yes, start = $D800, size = $0800;
|
||||||
|
|
||||||
# address of relocated character generator (same addess as ROM version)
|
# address of relocated character generator (same addess as ROM version)
|
||||||
CHARGEN: file = "", define = yes, start = $E000, size = $0400;
|
CHARGEN: file = "", define = yes, start = $E000, size = __CHARGENSIZE__;
|
||||||
|
|
||||||
# memory beneath the ROM
|
# memory beneath the ROM
|
||||||
HIDDEN_RAM: file = "", define = yes, start = $E400, size = $FFFA - $E400;
|
HIDDEN_RAM: file = "", define = yes, start = $E000 + __CHARGENSIZE__, size = $FFFA - $E000 - __CHARGENSIZE__;
|
||||||
|
|
||||||
# overlays
|
# overlays
|
||||||
OVL1: file = "%O.1", start = %S, size = __OVERLAYSIZE__;
|
OVL1: file = "%O.1", start = %S, size = __OVERLAYSIZE__;
|
||||||
@@ -64,7 +65,7 @@ SEGMENTS {
|
|||||||
SYSCHKTRL: load = SYSCHKTRL, type = ro, optional = yes;
|
SYSCHKTRL: load = SYSCHKTRL, type = ro, optional = yes;
|
||||||
|
|
||||||
SRPREPHDR: load = SRPREPHDR, type = ro;
|
SRPREPHDR: load = SRPREPHDR, type = ro;
|
||||||
LOWBSS: load = SRPREPCHNK, type = bss, define = yes; # shared btw. SRPREPCHNK and RAM, not zero initialized
|
LOWBSS: load = SRPREPCHNK, type = bss, define = yes; # shared btw. SRPREPCHNK and MAIN, not zero initialized
|
||||||
SRPREP: load = SRPREPCHNK, type = rw, define = yes;
|
SRPREP: load = SRPREPCHNK, type = rw, define = yes;
|
||||||
SHADOW_RAM: load = SRPREPCHNK, run = HIDDEN_RAM, type = rw, define = yes, optional = yes;
|
SHADOW_RAM: load = SRPREPCHNK, run = HIDDEN_RAM, type = rw, define = yes, optional = yes;
|
||||||
SHADOW_RAM2: load = SRPREPCHNK, run = HIDDEN_RAM2, type = rw, define = yes, optional = yes;
|
SHADOW_RAM2: load = SRPREPCHNK, run = HIDDEN_RAM2, type = rw, define = yes, optional = yes;
|
||||||
@@ -77,7 +78,7 @@ SEGMENTS {
|
|||||||
CODE: load = MAIN, type = ro, define = yes;
|
CODE: load = MAIN, type = ro, define = yes;
|
||||||
RODATA: load = MAIN, type = ro;
|
RODATA: load = MAIN, type = ro;
|
||||||
DATA: load = MAIN, type = rw;
|
DATA: load = MAIN, type = rw;
|
||||||
INIT: load = MAIN, type = rw, optional = yes;
|
INIT: load = MAIN, type = bss, define = yes, optional = yes;
|
||||||
BSS: load = MAIN, type = bss, define = yes;
|
BSS: load = MAIN, type = bss, define = yes;
|
||||||
AUTOSTRT: load = TRAILER, type = ro;
|
AUTOSTRT: load = TRAILER, type = ro;
|
||||||
|
|
||||||
|
|||||||
@@ -4,35 +4,36 @@ FEATURES {
|
|||||||
STARTADDRESS: default = $2400;
|
STARTADDRESS: default = $2400;
|
||||||
}
|
}
|
||||||
SYMBOLS {
|
SYMBOLS {
|
||||||
__SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk
|
__SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk
|
||||||
__STACKSIZE__: type = weak, value = $0800; # 2k stack
|
__STACKSIZE__: type = weak, value = $0800; # 2k stack
|
||||||
__STARTADDRESS__: type = export, value = %S;
|
__STARTADDRESS__: type = export, value = %S;
|
||||||
|
__CHARGENSIZE__: type = weak, value = $0400;
|
||||||
__SYSCHKHDR__: type = export, value = 0; # Disable system check header
|
__SYSCHKHDR__: type = export, value = 0; # Disable system check header
|
||||||
__SYSCHKTRL__: type = export, value = 0; # Disable system check trailer
|
__SYSCHKTRL__: type = export, value = 0; # Disable system check trailer
|
||||||
}
|
}
|
||||||
MEMORY {
|
MEMORY {
|
||||||
ZP: file = "", define = yes, start = $0082, size = $007E;
|
ZP: file = "", define = yes, start = $0082, size = $007E;
|
||||||
|
|
||||||
# "system check" load chunk
|
# "system check" load chunk
|
||||||
SYSCHKCHNK: file = %O, start = $2E00, size = $0300;
|
SYSCHKCHNK: file = %O, start = $2E00, size = $0300;
|
||||||
|
|
||||||
# "shadow RAM preparation" load chunk
|
# "shadow RAM preparation" load chunk
|
||||||
SRPREPCHNK: file = %O, define = yes, start = %S, size = $7C20 - %S - $07FF; # $07FF: space for temp. chargen buffer, 1K aligned
|
SRPREPCHNK: file = %O, define = yes, start = %S, size = $7C20 - %S - $07FF; # $07FF: space for temp. chargen buffer, 1K aligned
|
||||||
|
|
||||||
# "main program" load chunk
|
# "main program" load chunk
|
||||||
MAIN: file = %O, define = yes, start = %S + __LOWBSS_SIZE__, size = $D000 - __STACKSIZE__ - %S - __LOWBSS_SIZE__;
|
MAIN: file = %O, define = yes, start = %S + __LOWBSS_SIZE__, size = $D000 - __STACKSIZE__ - %S - __LOWBSS_SIZE__;
|
||||||
|
|
||||||
# memory beneath the ROM preceeding the character generator
|
# memory beneath the ROM preceeding the character generator
|
||||||
HIDDEN_RAM2: file = "", define = yes, start = $D800, size = $0800;
|
HIDDEN_RAM2: file = "", define = yes, start = $D800, size = $0800;
|
||||||
|
|
||||||
# address of relocated character generator (same addess as ROM version)
|
# address of relocated character generator (same addess as ROM version)
|
||||||
CHARGEN: file = "", define = yes, start = $E000, size = $0400;
|
CHARGEN: file = "", define = yes, start = $E000, size = __CHARGENSIZE__;
|
||||||
|
|
||||||
# memory beneath the ROM
|
# memory beneath the ROM
|
||||||
HIDDEN_RAM: file = "", define = yes, start = $E400, size = $FFFA - $E400;
|
HIDDEN_RAM: file = "", define = yes, start = $E000 + __CHARGENSIZE__, size = $FFFA - $E000 - __CHARGENSIZE__;
|
||||||
|
|
||||||
# UNUSED - hide
|
# UNUSED - hide
|
||||||
UNUSED: file = "", start = $0, size = $10;
|
UNUSED: file = "", start = $0, size = $10;
|
||||||
}
|
}
|
||||||
FILES {
|
FILES {
|
||||||
%O: format = atari;
|
%O: format = atari;
|
||||||
@@ -47,7 +48,7 @@ SEGMENTS {
|
|||||||
EXTZP: load = ZP, type = zp, optional = yes;
|
EXTZP: load = ZP, type = zp, optional = yes;
|
||||||
|
|
||||||
SYSCHK: load = SYSCHKCHNK, type = rw, define = yes, optional = yes;
|
SYSCHK: load = SYSCHKCHNK, type = rw, define = yes, optional = yes;
|
||||||
LOWBSS: load = SRPREPCHNK, type = bss, define = yes; # shared btw. SRPREPCHNK and RAM, not zero initialized
|
LOWBSS: load = SRPREPCHNK, type = bss, define = yes; # shared btw. SRPREPCHNK and MAIN, not zero initialized
|
||||||
SRPREP: load = SRPREPCHNK, type = rw, define = yes;
|
SRPREP: load = SRPREPCHNK, type = rw, define = yes;
|
||||||
SHADOW_RAM: load = SRPREPCHNK, run = HIDDEN_RAM, type = rw, define = yes, optional = yes;
|
SHADOW_RAM: load = SRPREPCHNK, run = HIDDEN_RAM, type = rw, define = yes, optional = yes;
|
||||||
SHADOW_RAM2: load = SRPREPCHNK, run = HIDDEN_RAM2, type = rw, define = yes, optional = yes;
|
SHADOW_RAM2: load = SRPREPCHNK, run = HIDDEN_RAM2, type = rw, define = yes, optional = yes;
|
||||||
@@ -57,7 +58,7 @@ SEGMENTS {
|
|||||||
CODE: load = MAIN, type = ro, define = yes;
|
CODE: load = MAIN, type = ro, define = yes;
|
||||||
RODATA: load = MAIN, type = ro;
|
RODATA: load = MAIN, type = ro;
|
||||||
DATA: load = MAIN, type = rw;
|
DATA: load = MAIN, type = rw;
|
||||||
INIT: load = MAIN, type = rw, optional = yes;
|
INIT: load = MAIN, type = bss, define = yes, optional = yes;
|
||||||
BSS: load = MAIN, type = bss, define = yes;
|
BSS: load = MAIN, type = bss, define = yes;
|
||||||
SRPREPHDR: load = UNUSED, type = ro;
|
SRPREPHDR: load = UNUSED, type = ro;
|
||||||
SRPREPTRL: load = UNUSED, type = ro;
|
SRPREPTRL: load = UNUSED, type = ro;
|
||||||
|
|||||||
@@ -6,39 +6,40 @@ SYMBOLS {
|
|||||||
__SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk
|
__SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk
|
||||||
__AUTOSTART__: type = import; # force inclusion of autostart "trailer"
|
__AUTOSTART__: type = import; # force inclusion of autostart "trailer"
|
||||||
__STACKSIZE__: type = weak, value = $0800; # 2k stack
|
__STACKSIZE__: type = weak, value = $0800; # 2k stack
|
||||||
|
__CHARGENSIZE__: type = weak, value = $0400;
|
||||||
__STARTADDRESS__: type = export, value = %S;
|
__STARTADDRESS__: type = export, value = %S;
|
||||||
}
|
}
|
||||||
MEMORY {
|
MEMORY {
|
||||||
ZP: file = "", define = yes, start = $0082, size = $007E;
|
ZP: file = "", define = yes, start = $0082, size = $007E;
|
||||||
|
|
||||||
# just $FFFF
|
# just $FFFF
|
||||||
HEADER: file = %O, start = $0000, size = $0002;
|
HEADER: file = %O, start = $0000, size = $0002;
|
||||||
|
|
||||||
# "system check" load chunk
|
# "system check" load chunk
|
||||||
SYSCHKHDR: file = %O, start = $0000, size = $0004;
|
SYSCHKHDR: file = %O, start = $0000, size = $0004;
|
||||||
SYSCHKCHNK: file = %O, start = $2E00, size = $0300;
|
SYSCHKCHNK: file = %O, start = $2E00, size = $0300;
|
||||||
SYSCHKTRL: file = %O, start = $0000, size = $0006;
|
SYSCHKTRL: file = %O, start = $0000, size = $0006;
|
||||||
|
|
||||||
# "shadow RAM preparation" load chunk
|
# "shadow RAM preparation" load chunk
|
||||||
SRPREPHDR: file = %O, start = $0000, size = $0004;
|
SRPREPHDR: file = %O, start = $0000, size = $0004;
|
||||||
SRPREPCHNK: file = %O, define = yes, start = %S, size = $7C20 - %S - $07FF; # $07FF: space for temp. chargen buffer, 1K aligned
|
SRPREPCHNK: file = %O, define = yes, start = %S, size = $7C20 - %S - $07FF; # $07FF: space for temp. chargen buffer, 1K aligned
|
||||||
SRPREPTRL: file = %O, start = $0000, size = $0006;
|
SRPREPTRL: file = %O, start = $0000, size = $0006;
|
||||||
|
|
||||||
# "main program" load chunk
|
# "main program" load chunk
|
||||||
MAINHDR: file = %O, start = $0000, size = $0004;
|
MAINHDR: file = %O, start = $0000, size = $0004;
|
||||||
MAIN: file = %O, define = yes, start = %S + __LOWBSS_SIZE__, size = $D000 - __STACKSIZE__ - %S - __LOWBSS_SIZE__;
|
MAIN: file = %O, define = yes, start = %S + __LOWBSS_SIZE__, size = $D000 - __STACKSIZE__ - %S - __LOWBSS_SIZE__;
|
||||||
|
|
||||||
# defines entry point into program
|
# defines entry point into program
|
||||||
TRAILER: file = %O, start = $0000, size = $0006;
|
TRAILER: file = %O, start = $0000, size = $0006;
|
||||||
|
|
||||||
# memory beneath the ROM preceeding the character generator
|
# memory beneath the ROM preceeding the character generator
|
||||||
HIDDEN_RAM2: file = "", define = yes, start = $D800, size = $0800;
|
HIDDEN_RAM2: file = "", define = yes, start = $D800, size = $0800;
|
||||||
|
|
||||||
# address of relocated character generator (same addess as ROM version)
|
# address of relocated character generator (same addess as ROM version)
|
||||||
CHARGEN: file = "", define = yes, start = $E000, size = $0400;
|
CHARGEN: file = "", define = yes, start = $E000, size = __CHARGENSIZE__;
|
||||||
|
|
||||||
# memory beneath the ROM
|
# memory beneath the ROM
|
||||||
HIDDEN_RAM: file = "", define = yes, start = $E400, size = $FFFA - $E400;
|
HIDDEN_RAM: file = "", define = yes, start = $E000 + __CHARGENSIZE__, size = $FFFA - $E000 - __CHARGENSIZE__;
|
||||||
}
|
}
|
||||||
SEGMENTS {
|
SEGMENTS {
|
||||||
ZEROPAGE: load = ZP, type = zp;
|
ZEROPAGE: load = ZP, type = zp;
|
||||||
@@ -51,7 +52,7 @@ SEGMENTS {
|
|||||||
SYSCHKTRL: load = SYSCHKTRL, type = ro, optional = yes;
|
SYSCHKTRL: load = SYSCHKTRL, type = ro, optional = yes;
|
||||||
|
|
||||||
SRPREPHDR: load = SRPREPHDR, type = ro;
|
SRPREPHDR: load = SRPREPHDR, type = ro;
|
||||||
LOWBSS: load = SRPREPCHNK, type = bss, define = yes; # shared btw. SRPREPCHNK and RAM, not zero initialized
|
LOWBSS: load = SRPREPCHNK, type = bss, define = yes; # shared btw. SRPREPCHNK and MAIN, not zero initialized
|
||||||
SRPREP: load = SRPREPCHNK, type = rw, define = yes;
|
SRPREP: load = SRPREPCHNK, type = rw, define = yes;
|
||||||
SHADOW_RAM: load = SRPREPCHNK, run = HIDDEN_RAM, type = rw, define = yes, optional = yes;
|
SHADOW_RAM: load = SRPREPCHNK, run = HIDDEN_RAM, type = rw, define = yes, optional = yes;
|
||||||
SHADOW_RAM2: load = SRPREPCHNK, run = HIDDEN_RAM2, type = rw, define = yes, optional = yes;
|
SHADOW_RAM2: load = SRPREPCHNK, run = HIDDEN_RAM2, type = rw, define = yes, optional = yes;
|
||||||
@@ -64,7 +65,7 @@ SEGMENTS {
|
|||||||
CODE: load = MAIN, type = ro, define = yes;
|
CODE: load = MAIN, type = ro, define = yes;
|
||||||
RODATA: load = MAIN, type = ro;
|
RODATA: load = MAIN, type = ro;
|
||||||
DATA: load = MAIN, type = rw;
|
DATA: load = MAIN, type = rw;
|
||||||
INIT: load = MAIN, type = rw, optional = yes;
|
INIT: load = MAIN, type = bss, define = yes, optional = yes;
|
||||||
BSS: load = MAIN, type = bss, define = yes;
|
BSS: load = MAIN, type = bss, define = yes;
|
||||||
AUTOSTRT: load = TRAILER, type = ro;
|
AUTOSTRT: load = TRAILER, type = ro;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ SEGMENTS {
|
|||||||
CODE: load = MAIN, type = ro;
|
CODE: load = MAIN, type = ro;
|
||||||
RODATA: load = MAIN, type = ro;
|
RODATA: load = MAIN, type = ro;
|
||||||
DATA: load = MAIN, type = rw;
|
DATA: load = MAIN, type = rw;
|
||||||
INIT: load = MAIN, type = rw;
|
INIT: load = MAIN, type = rw; # uninitialized, but reserves output space
|
||||||
ONCE: load = MAIN, type = ro, define = yes;
|
ONCE: load = MAIN, type = ro, define = yes;
|
||||||
BASTAIL: load = MAIN, type = ro, optional = yes;
|
BASTAIL: load = MAIN, type = ro, optional = yes;
|
||||||
BSS: load = BSS, type = bss, define = yes;
|
BSS: load = BSS, type = bss, define = yes;
|
||||||
|
|||||||
20
cfg/c128-asm.cfg
Normal file
20
cfg/c128-asm.cfg
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
FEATURES {
|
||||||
|
STARTADDRESS: default = $1c01;
|
||||||
|
}
|
||||||
|
SYMBOLS {
|
||||||
|
__LOADADDR__: type = import;
|
||||||
|
}
|
||||||
|
MEMORY {
|
||||||
|
ZP: file = "", start = $0002, size = $00FE, define = yes;
|
||||||
|
LOADADDR: file = %O, start = %S - 2, size = $0002;
|
||||||
|
MAIN: file = %O, start = %S, size = $D000 - %S;
|
||||||
|
}
|
||||||
|
SEGMENTS {
|
||||||
|
ZEROPAGE: load = ZP, type = zp, optional = yes;
|
||||||
|
LOADADDR: load = LOADADDR, type = ro;
|
||||||
|
EXEHDR: load = MAIN, type = ro, optional = yes;
|
||||||
|
CODE: load = MAIN, type = rw;
|
||||||
|
RODATA: load = MAIN, type = ro, optional = yes;
|
||||||
|
DATA: load = MAIN, type = rw, optional = yes;
|
||||||
|
BSS: load = MAIN, type = bss, optional = yes, define = yes;
|
||||||
|
}
|
||||||
20
cfg/c16-asm.cfg
Normal file
20
cfg/c16-asm.cfg
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
FEATURES {
|
||||||
|
STARTADDRESS: default = $1001;
|
||||||
|
}
|
||||||
|
SYMBOLS {
|
||||||
|
__LOADADDR__: type = import;
|
||||||
|
}
|
||||||
|
MEMORY {
|
||||||
|
ZP: file = "", start = $0002, size = $001A;
|
||||||
|
LOADADDR: file = %O, start = %S - 2, size = $0002;
|
||||||
|
MAIN: file = %O, start = %S, size = $3000 - %S;
|
||||||
|
}
|
||||||
|
SEGMENTS {
|
||||||
|
ZEROPAGE: load = ZP, type = zp, optional = yes;
|
||||||
|
LOADADDR: load = LOADADDR, type = ro;
|
||||||
|
EXEHDR: load = MAIN, type = ro, optional = yes;
|
||||||
|
CODE: load = MAIN, type = ro;
|
||||||
|
RODATA: load = MAIN, type = ro, optional = yes;
|
||||||
|
DATA: load = MAIN, type = rw, optional = yes;
|
||||||
|
BSS: load = MAIN, type = bss, define = yes;
|
||||||
|
}
|
||||||
@@ -14,7 +14,7 @@ MEMORY {
|
|||||||
ZP: file = "", define = yes, start = $0002, size = $001A;
|
ZP: file = "", define = yes, start = $0002, size = $001A;
|
||||||
LOADADDR: file = %O, start = %S - 2, size = $0002;
|
LOADADDR: file = %O, start = %S - 2, size = $0002;
|
||||||
HEADER: file = %O, define = yes, start = %S, size = $000D;
|
HEADER: file = %O, define = yes, start = %S, size = $000D;
|
||||||
MAIN: file = %O, define = yes, start = __HEADER_LAST__, size = __HIMEM__ - __HEADER_LAST__;
|
MAIN: file = %O, define = yes, start = __HEADER_LAST__, size = __OVERLAYSTART__ - __HEADER_LAST__;
|
||||||
BSS: file = "", start = __ONCE_RUN__, size = __OVERLAYSTART__ - __STACKSIZE__ - __ONCE_RUN__;
|
BSS: file = "", start = __ONCE_RUN__, size = __OVERLAYSTART__ - __STACKSIZE__ - __ONCE_RUN__;
|
||||||
OVL1ADDR: file = "%O.1", start = __OVERLAYSTART__ - 2, size = $0002;
|
OVL1ADDR: file = "%O.1", start = __OVERLAYSTART__ - 2, size = $0002;
|
||||||
OVL1: file = "%O.1", start = __OVERLAYSTART__, size = __OVERLAYSIZE__;
|
OVL1: file = "%O.1", start = __OVERLAYSTART__, size = __OVERLAYSIZE__;
|
||||||
@@ -44,7 +44,7 @@ SEGMENTS {
|
|||||||
CODE: load = MAIN, type = ro;
|
CODE: load = MAIN, type = ro;
|
||||||
RODATA: load = MAIN, type = ro;
|
RODATA: load = MAIN, type = ro;
|
||||||
DATA: load = MAIN, type = rw;
|
DATA: load = MAIN, type = rw;
|
||||||
INIT: load = MAIN, type = rw;
|
INIT: load = MAIN, type = rw; # uninitialized, but reserves output space
|
||||||
ONCE: load = MAIN, type = ro, define = yes;
|
ONCE: load = MAIN, type = ro, define = yes;
|
||||||
BSS: load = BSS, type = bss, define = yes;
|
BSS: load = BSS, type = bss, define = yes;
|
||||||
OVL1ADDR: load = OVL1ADDR, type = ro;
|
OVL1ADDR: load = OVL1ADDR, type = ro;
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ SEGMENTS {
|
|||||||
CODE: load = MAIN, type = ro;
|
CODE: load = MAIN, type = ro;
|
||||||
RODATA: load = MAIN, type = ro;
|
RODATA: load = MAIN, type = ro;
|
||||||
DATA: load = MAIN, type = rw;
|
DATA: load = MAIN, type = rw;
|
||||||
INIT: load = MAIN, type = rw;
|
INIT: load = MAIN, type = rw; # uninitialized, but reserves output space
|
||||||
ONCE: load = MAIN, type = ro, define = yes;
|
ONCE: load = MAIN, type = ro, define = yes;
|
||||||
BSS: load = BSS, type = bss, define = yes;
|
BSS: load = BSS, type = bss, define = yes;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,10 +11,10 @@ SEGMENTS {
|
|||||||
ZP: load = ZP, type = zp, optional = yes;
|
ZP: load = ZP, type = zp, optional = yes;
|
||||||
VECTORS: load = ROM, run = RAM, type = rw, define = yes;
|
VECTORS: load = ROM, run = RAM, type = rw, define = yes;
|
||||||
DATA: load = ROM, run = RAM, type = rw, define = yes, start = $0204;
|
DATA: load = ROM, run = RAM, type = rw, define = yes, start = $0204;
|
||||||
|
INIT: load = RAM, type = bss, optional = yes;
|
||||||
BSS: load = RAM, type = bss, define = yes;
|
BSS: load = RAM, type = bss, define = yes;
|
||||||
ONCE: load = ROM, type = ro, optional = yes;
|
ONCE: load = ROM, type = ro, optional = yes;
|
||||||
CODE: load = ROM, type = ro;
|
CODE: load = ROM, type = ro;
|
||||||
INIT: load = ROM, type = ro;
|
|
||||||
RODATA: load = ROM, type = ro;
|
RODATA: load = ROM, type = ro;
|
||||||
AUDIO: load = ROM, type = ro, optional = yes, start = $BF00;
|
AUDIO: load = ROM, type = ro, optional = yes, start = $BF00;
|
||||||
SETUP: load = ROM, type = ro, start = $BFE8;
|
SETUP: load = ROM, type = ro, start = $BFE8;
|
||||||
|
|||||||
@@ -3,22 +3,28 @@ FEATURES {
|
|||||||
}
|
}
|
||||||
SYMBOLS {
|
SYMBOLS {
|
||||||
__LOADADDR__: type = import;
|
__LOADADDR__: type = import;
|
||||||
|
# Putting "-u __EXEHDR__" on cl65's command line will add a BASIC RUN stub to your program.
|
||||||
|
# __EXEHDR__: type = import;
|
||||||
__HIMEM__: type = weak, value = $9F00;
|
__HIMEM__: type = weak, value = $9F00;
|
||||||
}
|
}
|
||||||
MEMORY {
|
MEMORY {
|
||||||
ZP: file = "", start = $0004, size = $0090 - $0004, define = yes;
|
ZP: file = "", start = $0022, size = $0080 - $0022, define = yes;
|
||||||
|
ZP2: file = "", start = $00A9, size = $0100 - $00A9;
|
||||||
LOADADDR: file = %O, start = %S - 2, size = $0002;
|
LOADADDR: file = %O, start = %S - 2, size = $0002;
|
||||||
MAIN: file = %O, start = %S, size = __HIMEM__ - %S;
|
MAIN: file = %O, start = %S, size = __HIMEM__ - %S;
|
||||||
}
|
}
|
||||||
SEGMENTS {
|
SEGMENTS {
|
||||||
ZEROPAGE: load = ZP, type = zp;
|
ZEROPAGE: load = ZP, type = zp;
|
||||||
|
EXTZP: load = ZP2, type = zp, optional = yes; # OK if BASIC functions not used
|
||||||
LOADADDR: load = LOADADDR, type = ro;
|
LOADADDR: load = LOADADDR, type = ro;
|
||||||
EXEHDR: load = MAIN, type = ro, optional = yes;
|
EXEHDR: load = MAIN, type = ro, optional = yes;
|
||||||
LOWCODE: load = MAIN, type = ro, optional = yes;
|
|
||||||
CODE: load = MAIN, type = ro;
|
CODE: load = MAIN, type = ro;
|
||||||
|
LOWCODE: load = MAIN, type = ro, optional = yes;
|
||||||
|
ONCE: load = MAIN, type = ro, optional = yes;
|
||||||
RODATA: load = MAIN, type = ro;
|
RODATA: load = MAIN, type = ro;
|
||||||
DATA: load = MAIN, type = rw;
|
DATA: load = MAIN, type = rw;
|
||||||
BSS: load = MAIN, type = bss, define = yes;
|
INIT: load = MAIN, type = bss, optional = yes;
|
||||||
|
BSS: load = MAIN, type = bss, define = yes;
|
||||||
}
|
}
|
||||||
FEATURES {
|
FEATURES {
|
||||||
CONDES: type = constructor,
|
CONDES: type = constructor,
|
||||||
|
|||||||
@@ -11,89 +11,85 @@ SYMBOLS {
|
|||||||
__BANKRAMSIZE__: type = weak, value = $2000; # 8K banked RAM
|
__BANKRAMSIZE__: type = weak, value = $2000; # 8K banked RAM
|
||||||
}
|
}
|
||||||
MEMORY {
|
MEMORY {
|
||||||
ZP: file = "", define = yes, start = $0004, size = $0090 - $0004;
|
ZP: file = "", define = yes, start = $0022, size = $0080 - $0022;
|
||||||
LOADADDR: file = %O, start = %S - 2, size = $0002;
|
LOADADDR: file = %O, start = %S - 2, size = $0002;
|
||||||
HEADER: file = %O, define = yes, start = %S, size = $000D;
|
HEADER: file = %O, define = yes, start = %S, size = $000D;
|
||||||
MAIN: file = %O, define = yes, start = __HEADER_LAST__, size = __HIMEM__ - __HEADER_LAST__;
|
MAIN: file = %O, define = yes, start = __HEADER_LAST__, size = __HIMEM__ - __HEADER_LAST__;
|
||||||
BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __ONCE_RUN__ - __STACKSIZE__;
|
BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __ONCE_RUN__ - __STACKSIZE__;
|
||||||
BRAM00ADDR: file = "%O.00", start = __BANKRAMSTART__ - 2, size = $0002;
|
|
||||||
BRAM00: file = "%O.00", start = __BANKRAMSTART__, size = __BANKRAMSIZE__;
|
|
||||||
BRAM01ADDR: file = "%O.01", start = __BANKRAMSTART__ - 2, size = $0002;
|
BRAM01ADDR: file = "%O.01", start = __BANKRAMSTART__ - 2, size = $0002;
|
||||||
BRAM01: file = "%O.01", start = __BANKRAMSTART__, size = __BANKRAMSIZE__;
|
BRAM01: file = "%O.01", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $01;
|
||||||
BRAM02ADDR: file = "%O.02", start = __BANKRAMSTART__ - 2, size = $0002;
|
BRAM02ADDR: file = "%O.02", start = __BANKRAMSTART__ - 2, size = $0002;
|
||||||
BRAM02: file = "%O.02", start = __BANKRAMSTART__, size = __BANKRAMSIZE__;
|
BRAM02: file = "%O.02", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $02;
|
||||||
BRAM03ADDR: file = "%O.03", start = __BANKRAMSTART__ - 2, size = $0002;
|
BRAM03ADDR: file = "%O.03", start = __BANKRAMSTART__ - 2, size = $0002;
|
||||||
BRAM03: file = "%O.03", start = __BANKRAMSTART__, size = __BANKRAMSIZE__;
|
BRAM03: file = "%O.03", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $03;
|
||||||
BRAM04ADDR: file = "%O.04", start = __BANKRAMSTART__ - 2, size = $0002;
|
BRAM04ADDR: file = "%O.04", start = __BANKRAMSTART__ - 2, size = $0002;
|
||||||
BRAM04: file = "%O.04", start = __BANKRAMSTART__, size = __BANKRAMSIZE__;
|
BRAM04: file = "%O.04", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $04;
|
||||||
BRAM05ADDR: file = "%O.05", start = __BANKRAMSTART__ - 2, size = $0002;
|
BRAM05ADDR: file = "%O.05", start = __BANKRAMSTART__ - 2, size = $0002;
|
||||||
BRAM05: file = "%O.05", start = __BANKRAMSTART__, size = __BANKRAMSIZE__;
|
BRAM05: file = "%O.05", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $05;
|
||||||
BRAM06ADDR: file = "%O.06", start = __BANKRAMSTART__ - 2, size = $0002;
|
BRAM06ADDR: file = "%O.06", start = __BANKRAMSTART__ - 2, size = $0002;
|
||||||
BRAM06: file = "%O.06", start = __BANKRAMSTART__, size = __BANKRAMSIZE__;
|
BRAM06: file = "%O.06", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $06;
|
||||||
BRAM07ADDR: file = "%O.07", start = __BANKRAMSTART__ - 2, size = $0002;
|
BRAM07ADDR: file = "%O.07", start = __BANKRAMSTART__ - 2, size = $0002;
|
||||||
BRAM07: file = "%O.07", start = __BANKRAMSTART__, size = __BANKRAMSIZE__;
|
BRAM07: file = "%O.07", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $07;
|
||||||
BRAM08ADDR: file = "%O.08", start = __BANKRAMSTART__ - 2, size = $0002;
|
BRAM08ADDR: file = "%O.08", start = __BANKRAMSTART__ - 2, size = $0002;
|
||||||
BRAM08: file = "%O.08", start = __BANKRAMSTART__, size = __BANKRAMSIZE__;
|
BRAM08: file = "%O.08", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $08;
|
||||||
BRAM09ADDR: file = "%O.09", start = __BANKRAMSTART__ - 2, size = $0002;
|
BRAM09ADDR: file = "%O.09", start = __BANKRAMSTART__ - 2, size = $0002;
|
||||||
BRAM09: file = "%O.09", start = __BANKRAMSTART__, size = __BANKRAMSIZE__;
|
BRAM09: file = "%O.09", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $09;
|
||||||
BRAM0AADDR: file = "%O.0a", start = __BANKRAMSTART__ - 2, size = $0002;
|
BRAM0AADDR: file = "%O.0A", start = __BANKRAMSTART__ - 2, size = $0002;
|
||||||
BRAM0A: file = "%O.0a", start = __BANKRAMSTART__, size = __BANKRAMSIZE__;
|
BRAM0A: file = "%O.0A", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $0A;
|
||||||
BRAM0BADDR: file = "%O.0b", start = __BANKRAMSTART__ - 2, size = $0002;
|
BRAM0BADDR: file = "%O.0B", start = __BANKRAMSTART__ - 2, size = $0002;
|
||||||
BRAM0B: file = "%O.0b", start = __BANKRAMSTART__, size = __BANKRAMSIZE__;
|
BRAM0B: file = "%O.0B", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $0B;
|
||||||
BRAM0CADDR: file = "%O.0c", start = __BANKRAMSTART__ - 2, size = $0002;
|
BRAM0CADDR: file = "%O.0C", start = __BANKRAMSTART__ - 2, size = $0002;
|
||||||
BRAM0C: file = "%O.0c", start = __BANKRAMSTART__, size = __BANKRAMSIZE__;
|
BRAM0C: file = "%O.0C", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $0C;
|
||||||
BRAM0DADDR: file = "%O.0d", start = __BANKRAMSTART__ - 2, size = $0002;
|
BRAM0DADDR: file = "%O.0D", start = __BANKRAMSTART__ - 2, size = $0002;
|
||||||
BRAM0D: file = "%O.0d", start = __BANKRAMSTART__, size = __BANKRAMSIZE__;
|
BRAM0D: file = "%O.0D", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $0D;
|
||||||
BRAM0EADDR: file = "%O.0e", start = __BANKRAMSTART__ - 2, size = $0002;
|
BRAM0EADDR: file = "%O.0E", start = __BANKRAMSTART__ - 2, size = $0002;
|
||||||
BRAM0E: file = "%O.0e", start = __BANKRAMSTART__, size = __BANKRAMSIZE__;
|
BRAM0E: file = "%O.0E", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $0E;
|
||||||
BRAM0FADDR: file = "%O.0f", start = __BANKRAMSTART__ - 2, size = $0002;
|
BRAM0FADDR: file = "%O.0F", start = __BANKRAMSTART__ - 2, size = $0002;
|
||||||
BRAM0F: file = "%O.0f", start = __BANKRAMSTART__, size = __BANKRAMSIZE__;
|
BRAM0F: file = "%O.0F", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $0F;
|
||||||
}
|
}
|
||||||
SEGMENTS {
|
SEGMENTS {
|
||||||
ZEROPAGE: load = ZP, type = zp;
|
ZEROPAGE: load = ZP, type = zp;
|
||||||
EXTZP: load = ZP, type = zp, optional = yes;
|
EXTZP: load = ZP, type = zp, optional = yes;
|
||||||
LOADADDR: load = LOADADDR, type = ro;
|
LOADADDR: load = LOADADDR, type = ro;
|
||||||
EXEHDR: load = HEADER, type = ro;
|
EXEHDR: load = HEADER, type = ro;
|
||||||
STARTUP: load = MAIN, type = ro;
|
STARTUP: load = MAIN, type = ro, optional = yes;
|
||||||
LOWCODE: load = MAIN, type = ro, optional = yes;
|
LOWCODE: load = MAIN, type = ro, optional = yes;
|
||||||
CODE: load = MAIN, type = ro;
|
CODE: load = MAIN, type = ro;
|
||||||
RODATA: load = MAIN, type = ro;
|
RODATA: load = MAIN, type = ro;
|
||||||
DATA: load = MAIN, type = rw;
|
DATA: load = MAIN, type = rw;
|
||||||
INIT: load = MAIN, type = rw;
|
INIT: load = MAIN, type = rw, optional = yes; # uninitialized, but reserves output space
|
||||||
ONCE: load = MAIN, type = ro, define = yes;
|
ONCE: load = MAIN, type = ro, define = yes;
|
||||||
BSS: load = BSS, type = bss, define = yes;
|
BSS: load = BSS, type = bss, define = yes;
|
||||||
BRAM00ADDR: load = BRAM00ADDR, type = ro, optional = yes;
|
BRAM01ADDR: load = BRAM01ADDR, type = ro, optional = yes;
|
||||||
BANKRAM00: load = BRAM00, type = rw, define = yes, optional = yes;
|
BANKRAM01: load = BRAM01, type = rw, optional = yes, define = yes;
|
||||||
BRAM01ADDR: load = BRAM01ADDR, type = ro, optional = yes;
|
BRAM02ADDR: load = BRAM02ADDR, type = ro, optional = yes;
|
||||||
BANKRAM01: load = BRAM01, type = rw, define = yes, optional = yes;
|
BANKRAM02: load = BRAM02, type = rw, optional = yes, define = yes;
|
||||||
BRAM02ADDR: load = BRAM02ADDR, type = ro, optional = yes;
|
BRAM03ADDR: load = BRAM03ADDR, type = ro, optional = yes;
|
||||||
BANKRAM02: load = BRAM02, type = rw, define = yes, optional = yes;
|
BANKRAM03: load = BRAM03, type = rw, optional = yes, define = yes;
|
||||||
BRAM03ADDR: load = BRAM03ADDR, type = ro, optional = yes;
|
BRAM04ADDR: load = BRAM04ADDR, type = ro, optional = yes;
|
||||||
BANKRAM03: load = BRAM03, type = rw, define = yes, optional = yes;
|
BANKRAM04: load = BRAM04, type = rw, optional = yes, define = yes;
|
||||||
BRAM04ADDR: load = BRAM04ADDR, type = ro, optional = yes;
|
BRAM05ADDR: load = BRAM05ADDR, type = ro, optional = yes;
|
||||||
BANKRAM04: load = BRAM04, type = rw, define = yes, optional = yes;
|
BANKRAM05: load = BRAM05, type = rw, optional = yes, define = yes;
|
||||||
BRAM05ADDR: load = BRAM05ADDR, type = ro, optional = yes;
|
BRAM06ADDR: load = BRAM06ADDR, type = ro, optional = yes;
|
||||||
BANKRAM05: load = BRAM05, type = rw, define = yes, optional = yes;
|
BANKRAM06: load = BRAM06, type = rw, optional = yes, define = yes;
|
||||||
BRAM06ADDR: load = BRAM06ADDR, type = ro, optional = yes;
|
BRAM07ADDR: load = BRAM07ADDR, type = ro, optional = yes;
|
||||||
BANKRAM06: load = BRAM06, type = rw, define = yes, optional = yes;
|
BANKRAM07: load = BRAM07, type = rw, optional = yes, define = yes;
|
||||||
BRAM07ADDR: load = BRAM07ADDR, type = ro, optional = yes;
|
BRAM08ADDR: load = BRAM08ADDR, type = ro, optional = yes;
|
||||||
BANKRAM07: load = BRAM07, type = rw, define = yes, optional = yes;
|
BANKRAM08: load = BRAM08, type = rw, optional = yes, define = yes;
|
||||||
BRAM08ADDR: load = BRAM08ADDR, type = ro, optional = yes;
|
BRAM09ADDR: load = BRAM09ADDR, type = ro, optional = yes;
|
||||||
BANKRAM08: load = BRAM08, type = rw, define = yes, optional = yes;
|
BANKRAM09: load = BRAM09, type = rw, optional = yes, define = yes;
|
||||||
BRAM09ADDR: load = BRAM09ADDR, type = ro, optional = yes;
|
BRAM0AADDR: load = BRAM0AADDR, type = ro, optional = yes;
|
||||||
BANKRAM09: load = BRAM09, type = rw, define = yes, optional = yes;
|
BANKRAM0A: load = BRAM0A, type = rw, optional = yes, define = yes;
|
||||||
BRAM0AADDR: load = BRAM0AADDR, type = ro, optional = yes;
|
BRAM0BADDR: load = BRAM0BADDR, type = ro, optional = yes;
|
||||||
BANKRAM0A: load = BRAM0A, type = rw, define = yes, optional = yes;
|
BANKRAM0B: load = BRAM0B, type = rw, optional = yes, define = yes;
|
||||||
BRAM0BADDR: load = BRAM0BADDR, type = ro, optional = yes;
|
BRAM0CADDR: load = BRAM0CADDR, type = ro, optional = yes;
|
||||||
BANKRAM0B: load = BRAM0B, type = rw, define = yes, optional = yes;
|
BANKRAM0C: load = BRAM0C, type = rw, optional = yes, define = yes;
|
||||||
BRAM0CADDR: load = BRAM0CADDR, type = ro, optional = yes;
|
BRAM0DADDR: load = BRAM0DADDR, type = ro, optional = yes;
|
||||||
BANKRAM0C: load = BRAM0C, type = rw, define = yes, optional = yes;
|
BANKRAM0D: load = BRAM0D, type = rw, optional = yes, define = yes;
|
||||||
BRAM0DADDR: load = BRAM0DADDR, type = ro, optional = yes;
|
BRAM0EADDR: load = BRAM0EADDR, type = ro, optional = yes;
|
||||||
BANKRAM0D: load = BRAM0D, type = rw, define = yes, optional = yes;
|
BANKRAM0E: load = BRAM0E, type = rw, optional = yes, define = yes;
|
||||||
BRAM0EADDR: load = BRAM0EADDR, type = ro, optional = yes;
|
BRAM0FADDR: load = BRAM0FADDR, type = ro, optional = yes;
|
||||||
BANKRAM0E: load = BRAM0E, type = rw, define = yes, optional = yes;
|
BANKRAM0F: load = BRAM0F, type = rw, optional = yes, define = yes;
|
||||||
BRAM0FADDR: load = BRAM0FADDR, type = ro, optional = yes;
|
|
||||||
BANKRAM0F: load = BRAM0F, type = rw, define = yes, optional = yes;
|
|
||||||
}
|
}
|
||||||
FEATURES {
|
FEATURES {
|
||||||
CONDES: type = constructor,
|
CONDES: type = constructor,
|
||||||
|
|||||||
14
cfg/cx16.cfg
14
cfg/cx16.cfg
@@ -8,7 +8,7 @@ SYMBOLS {
|
|||||||
__HIMEM__: type = weak, value = $9F00;
|
__HIMEM__: type = weak, value = $9F00;
|
||||||
}
|
}
|
||||||
MEMORY {
|
MEMORY {
|
||||||
ZP: file = "", define = yes, start = $0004, size = $0090 - $0004;
|
ZP: file = "", define = yes, start = $0022, size = $0080 - $0022;
|
||||||
LOADADDR: file = %O, start = %S - 2, size = $0002;
|
LOADADDR: file = %O, start = %S - 2, size = $0002;
|
||||||
HEADER: file = %O, define = yes, start = %S, size = $000D;
|
HEADER: file = %O, define = yes, start = %S, size = $000D;
|
||||||
MAIN: file = %O, define = yes, start = __HEADER_LAST__, size = __HIMEM__ - __HEADER_LAST__;
|
MAIN: file = %O, define = yes, start = __HEADER_LAST__, size = __HIMEM__ - __HEADER_LAST__;
|
||||||
@@ -16,17 +16,17 @@ MEMORY {
|
|||||||
}
|
}
|
||||||
SEGMENTS {
|
SEGMENTS {
|
||||||
ZEROPAGE: load = ZP, type = zp;
|
ZEROPAGE: load = ZP, type = zp;
|
||||||
EXTZP: load = ZP, type = zp, optional = yes;
|
EXTZP: load = ZP, type = zp, optional = yes;
|
||||||
LOADADDR: load = LOADADDR, type = ro;
|
LOADADDR: load = LOADADDR, type = ro;
|
||||||
EXEHDR: load = HEADER, type = ro;
|
EXEHDR: load = HEADER, type = ro;
|
||||||
STARTUP: load = MAIN, type = ro;
|
STARTUP: load = MAIN, type = ro, optional = yes;
|
||||||
LOWCODE: load = MAIN, type = ro, optional = yes;
|
LOWCODE: load = MAIN, type = ro, optional = yes;
|
||||||
CODE: load = MAIN, type = ro;
|
CODE: load = MAIN, type = ro;
|
||||||
RODATA: load = MAIN, type = ro;
|
RODATA: load = MAIN, type = ro;
|
||||||
DATA: load = MAIN, type = rw;
|
DATA: load = MAIN, type = rw;
|
||||||
INIT: load = MAIN, type = rw;
|
INIT: load = MAIN, type = rw, optional = yes; # uninitialized, but reserves output space
|
||||||
ONCE: load = MAIN, type = ro, define = yes;
|
ONCE: load = MAIN, type = ro, define = yes;
|
||||||
BSS: load = BSS, type = bss, define = yes;
|
BSS: load = BSS, type = bss, define = yes;
|
||||||
}
|
}
|
||||||
FEATURES {
|
FEATURES {
|
||||||
CONDES: type = constructor,
|
CONDES: type = constructor,
|
||||||
|
|||||||
41
cfg/kim1-60k.cfg
Normal file
41
cfg/kim1-60k.cfg
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
# kim1-60k.cfg (4k)
|
||||||
|
#
|
||||||
|
# for expanded KIM-1
|
||||||
|
#
|
||||||
|
# ld65 --config kim1-60k.cfg -o <prog>.bin <prog>.o
|
||||||
|
|
||||||
|
FEATURES {
|
||||||
|
STARTADDRESS: default = $2000;
|
||||||
|
CONDES: segment = STARTUP,
|
||||||
|
type = constructor,
|
||||||
|
label = __CONSTRUCTOR_TABLE__,
|
||||||
|
count = __CONSTRUCTOR_COUNT__;
|
||||||
|
CONDES: segment = STARTUP,
|
||||||
|
type = destructor,
|
||||||
|
label = __DESTRUCTOR_TABLE__,
|
||||||
|
count = __DESTRUCTOR_COUNT__;
|
||||||
|
}
|
||||||
|
|
||||||
|
SYMBOLS {
|
||||||
|
__STACKSIZE__: type = weak, value = $0080; # 128 byte program stack
|
||||||
|
__STARTADDRESS__: type = export, value = %S;
|
||||||
|
}
|
||||||
|
|
||||||
|
MEMORY {
|
||||||
|
ZP: file = %O, define = yes, start = $0000, size = $00EE;
|
||||||
|
CPUSTACK: file = "", define = yes, start = $0100, size = $0100;
|
||||||
|
RAM: file = %O, define = yes, start = %S, size = $E000 - %S - __STACKSIZE__;
|
||||||
|
MAINROM: file = "", define = yes, start = $E000, size = $1000;
|
||||||
|
TOP: file = "", define = yes, start = $F000, size = $1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
SEGMENTS {
|
||||||
|
ZEROPAGE: load = ZP, type = zp, define = yes;
|
||||||
|
STARTUP: load = RAM, type = ro, define = yes;
|
||||||
|
CODE: load = RAM, type = ro, define = yes;
|
||||||
|
RODATA: load = RAM, type = ro, define = yes;
|
||||||
|
ONCE: load = RAM, type = ro, define = yes;
|
||||||
|
DATA: load = RAM, type = rw, define = yes;
|
||||||
|
BSS: load = RAM, type = bss, define = yes;
|
||||||
|
}
|
||||||
|
|
||||||
41
cfg/kim1-mtu60k.cfg
Normal file
41
cfg/kim1-mtu60k.cfg
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
# kim1-mtu60k.cfg (4k)
|
||||||
|
#
|
||||||
|
# for expanded KIM-1 w/ K-1008 Graphics and 60K RAM
|
||||||
|
#
|
||||||
|
# ld65 --config kim1-mtu60k.cfg -o <prog>.bin <prog>.o
|
||||||
|
|
||||||
|
FEATURES {
|
||||||
|
STARTADDRESS: default = $2000;
|
||||||
|
CONDES: segment = STARTUP,
|
||||||
|
type = constructor,
|
||||||
|
label = __CONSTRUCTOR_TABLE__,
|
||||||
|
count = __CONSTRUCTOR_COUNT__;
|
||||||
|
CONDES: segment = STARTUP,
|
||||||
|
type = destructor,
|
||||||
|
label = __DESTRUCTOR_TABLE__,
|
||||||
|
count = __DESTRUCTOR_COUNT__;
|
||||||
|
}
|
||||||
|
|
||||||
|
SYMBOLS {
|
||||||
|
__STACKSIZE__: type = weak, value = $0080; # 128 byte program stack
|
||||||
|
__STARTADDRESS__: type = export, value = %S;
|
||||||
|
}
|
||||||
|
|
||||||
|
MEMORY {
|
||||||
|
ZP: file = %O, define = yes, start = $0000, size = $00EE;
|
||||||
|
CPUSTACK: file = "", define = yes, start = $0100, size = $0100;
|
||||||
|
RAM: file = %O, define = yes, start = %S, size = $E000 - %S - __STACKSIZE__;
|
||||||
|
MAINROM: file = "", define = yes, start = $E000, size = $1000;
|
||||||
|
TOP: file = "", define = yes, start = $F000, size = $1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
SEGMENTS {
|
||||||
|
ZEROPAGE: load = ZP, type = zp, define = yes;
|
||||||
|
STARTUP: load = RAM, type = ro, define = yes;
|
||||||
|
CODE: load = RAM, type = ro, define = yes;
|
||||||
|
RODATA: load = RAM, type = ro, define = yes;
|
||||||
|
ONCE: load = RAM, type = ro, define = yes;
|
||||||
|
DATA: load = RAM, type = rw, define = yes;
|
||||||
|
BSS: load = RAM, type = bss, define = yes;
|
||||||
|
}
|
||||||
|
|
||||||
41
cfg/kim1-mtuE000.cfg
Normal file
41
cfg/kim1-mtuE000.cfg
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
# kim1-mtu60k.cfg (4k)
|
||||||
|
#
|
||||||
|
# for expanded KIM-1 w/ K-1008 Graphics and 60K RAM
|
||||||
|
#
|
||||||
|
# ld65 --config kim1-mtu60k.cfg -o <prog>.bin <prog>.o
|
||||||
|
|
||||||
|
FEATURES {
|
||||||
|
STARTADDRESS: default = $E000;
|
||||||
|
CONDES: segment = STARTUP,
|
||||||
|
type = constructor,
|
||||||
|
label = __CONSTRUCTOR_TABLE__,
|
||||||
|
count = __CONSTRUCTOR_COUNT__;
|
||||||
|
CONDES: segment = STARTUP,
|
||||||
|
type = destructor,
|
||||||
|
label = __DESTRUCTOR_TABLE__,
|
||||||
|
count = __DESTRUCTOR_COUNT__;
|
||||||
|
}
|
||||||
|
|
||||||
|
SYMBOLS {
|
||||||
|
__STACKSIZE__: type = weak, value = $0080; # 128 byte program stack
|
||||||
|
__STARTADDRESS__: type = export, value = %S;
|
||||||
|
}
|
||||||
|
|
||||||
|
MEMORY {
|
||||||
|
ZP: file = %O, define = yes, start = $0000, size = $00EE;
|
||||||
|
CPUSTACK: file = "", define = yes, start = $0100, size = $0100;
|
||||||
|
RAM: file = %O, define = yes, start = $2000, size = $E000 - $2000 - __STACKSIZE__;
|
||||||
|
MAINROM: file = "", define = yes, start = $E000, size = $1000;
|
||||||
|
TOP: file = "", define = yes, start = $F000, size = $1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
SEGMENTS {
|
||||||
|
ZEROPAGE: load = ZP, type = zp, define = yes;
|
||||||
|
STARTUP: load = RAM, type = ro, define = yes;
|
||||||
|
CODE: load = RAM, type = ro, define = yes;
|
||||||
|
RODATA: load = RAM, type = ro, define = yes;
|
||||||
|
ONCE: load = RAM, type = ro, define = yes;
|
||||||
|
DATA: load = RAM, type = rw, define = yes;
|
||||||
|
BSS: load = RAM, type = bss, define = yes;
|
||||||
|
}
|
||||||
|
|
||||||
41
cfg/kim1.cfg
Normal file
41
cfg/kim1.cfg
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
# kim1.cfg (4k)
|
||||||
|
#
|
||||||
|
# for unexpanded KIM-1
|
||||||
|
#
|
||||||
|
# ld65 --config kim1.cfg -o <prog>.bin <prog>.o
|
||||||
|
|
||||||
|
FEATURES {
|
||||||
|
STARTADDRESS: default = $0200;
|
||||||
|
CONDES: segment = STARTUP,
|
||||||
|
type = constructor,
|
||||||
|
label = __CONSTRUCTOR_TABLE__,
|
||||||
|
count = __CONSTRUCTOR_COUNT__;
|
||||||
|
CONDES: segment = STARTUP,
|
||||||
|
type = destructor,
|
||||||
|
label = __DESTRUCTOR_TABLE__,
|
||||||
|
count = __DESTRUCTOR_COUNT__;
|
||||||
|
}
|
||||||
|
|
||||||
|
SYMBOLS {
|
||||||
|
__STACKSIZE__: type = weak, value = $0080; # 128 byte program stack
|
||||||
|
__STARTADDRESS__: type = export, value = %S;
|
||||||
|
}
|
||||||
|
|
||||||
|
MEMORY {
|
||||||
|
ZP: file = %O, define = yes, start = $0000, size = $00EE;
|
||||||
|
CPUSTACK: file = "", define = yes, start = $0100, size = $0100;
|
||||||
|
RAM: file = %O, define = yes, start = %S, size = $1000 - %S - __STACKSIZE__;
|
||||||
|
MAINROM: file = "", define = yes, start = $E000, size = $1000;
|
||||||
|
TOP: file = "", define = yes, start = $F000, size = $1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
SEGMENTS {
|
||||||
|
ZEROPAGE: load = ZP, type = zp, define = yes;
|
||||||
|
STARTUP: load = RAM, type = ro, define = yes;
|
||||||
|
CODE: load = RAM, type = ro, define = yes;
|
||||||
|
RODATA: load = RAM, type = ro, define = yes;
|
||||||
|
ONCE: load = RAM, type = ro, define = yes;
|
||||||
|
DATA: load = RAM, type = rw, define = yes;
|
||||||
|
BSS: load = RAM, type = bss, define = yes;
|
||||||
|
}
|
||||||
|
|
||||||
@@ -5,16 +5,17 @@ SYMBOLS {
|
|||||||
__BANK1BLOCKSIZE__: type = weak, value = $0000; # bank 1 block size
|
__BANK1BLOCKSIZE__: type = weak, value = $0000; # bank 1 block size
|
||||||
__EXEHDR__: type = import;
|
__EXEHDR__: type = import;
|
||||||
__BOOTLDR__: type = import;
|
__BOOTLDR__: type = import;
|
||||||
__DEFDIR__: type = import;
|
|
||||||
__UPLOADER__: type = import;
|
__UPLOADER__: type = import;
|
||||||
|
__UPLOADERSIZE__: type = export, value = $61;
|
||||||
|
__HEADERSIZE__: type = export, value = 64;
|
||||||
}
|
}
|
||||||
MEMORY {
|
MEMORY {
|
||||||
ZP: file = "", define = yes, start = $0000, size = $0100;
|
ZP: file = "", define = yes, start = $0000, size = $0100;
|
||||||
HEADER: file = %O, start = $0000, size = $0040;
|
HEADER: file = %O, start = $0000, size = __HEADERSIZE__;
|
||||||
BOOT: file = %O, start = $0200, size = __STARTOFDIRECTORY__;
|
BOOT: file = %O, start = $0200, size = __STARTOFDIRECTORY__;
|
||||||
DIR: file = %O, start = $0000, size = 8;
|
DIR: file = %O, start = $0000, size = 16;
|
||||||
MAIN: file = %O, define = yes, start = $0200, size = $BD38 - __STACKSIZE__;
|
MAIN: file = %O, define = yes, start = $0200, size = $C038 - __UPLOADERSIZE__ - $200 - __STACKSIZE__;
|
||||||
UPLDR: file = %O, define = yes, start = $BFDC, size = $005C;
|
UPLOAD: file = %O, define = yes, start = $C038 - __UPLOADERSIZE__, size = $0061;
|
||||||
}
|
}
|
||||||
SEGMENTS {
|
SEGMENTS {
|
||||||
ZEROPAGE: load = ZP, type = zp;
|
ZEROPAGE: load = ZP, type = zp;
|
||||||
@@ -30,8 +31,8 @@ SEGMENTS {
|
|||||||
RODATA: load = MAIN, type = ro, define = yes;
|
RODATA: load = MAIN, type = ro, define = yes;
|
||||||
DATA: load = MAIN, type = rw, define = yes;
|
DATA: load = MAIN, type = rw, define = yes;
|
||||||
BSS: load = MAIN, type = bss, define = yes;
|
BSS: load = MAIN, type = bss, define = yes;
|
||||||
UPCODE: load = UPLDR, type = ro, define = yes;
|
UPCODE: load = UPLOAD, type = ro, define = yes;
|
||||||
UPDATA: load = UPLDR, type = rw, define = yes;
|
UPDATA: load = UPLOAD, type = rw, define = yes;
|
||||||
}
|
}
|
||||||
FEATURES {
|
FEATURES {
|
||||||
CONDES: type = constructor,
|
CONDES: type = constructor,
|
||||||
|
|||||||
82
cfg/pet-overlay.cfg
Normal file
82
cfg/pet-overlay.cfg
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
FEATURES {
|
||||||
|
STARTADDRESS: default = $0401;
|
||||||
|
}
|
||||||
|
SYMBOLS {
|
||||||
|
__LOADADDR__: type = import;
|
||||||
|
__EXEHDR__: type = import;
|
||||||
|
__OVERLAYADDR__: type = import;
|
||||||
|
__STACKSIZE__: type = weak, value = $0800; # 2K stack
|
||||||
|
__OVERLAYSIZE__: type = weak, value = $0800; # 2K overlay
|
||||||
|
__HIMEM__: type = weak, value = $8000;
|
||||||
|
__OVERLAYSTART__: type = export, value = __HIMEM__ - __STACKSIZE__ - __OVERLAYSIZE__;
|
||||||
|
}
|
||||||
|
MEMORY {
|
||||||
|
ZP: file = "", define = yes, start = $0055, size = $001A;
|
||||||
|
LOADADDR: file = %O, start = %S - 2, size = $0002;
|
||||||
|
HEADER: file = %O, define = yes, start = %S, size = $000D;
|
||||||
|
MAIN: file = %O, define = yes, start = __HEADER_LAST__, size = __OVERLAYSTART__ - __HEADER_LAST__;
|
||||||
|
OVL1ADDR: file = "%O.1", start = __OVERLAYSTART__ - 2, size = $0002;
|
||||||
|
OVL1: file = "%O.1", start = __OVERLAYSTART__, size = __OVERLAYSIZE__;
|
||||||
|
OVL2ADDR: file = "%O.2", start = __OVERLAYSTART__ - 2, size = $0002;
|
||||||
|
OVL2: file = "%O.2", start = __OVERLAYSTART__, size = __OVERLAYSIZE__;
|
||||||
|
OVL3ADDR: file = "%O.3", start = __OVERLAYSTART__ - 2, size = $0002;
|
||||||
|
OVL3: file = "%O.3", start = __OVERLAYSTART__, size = __OVERLAYSIZE__;
|
||||||
|
OVL4ADDR: file = "%O.4", start = __OVERLAYSTART__ - 2, size = $0002;
|
||||||
|
OVL4: file = "%O.4", start = __OVERLAYSTART__, size = __OVERLAYSIZE__;
|
||||||
|
OVL5ADDR: file = "%O.5", start = __OVERLAYSTART__ - 2, size = $0002;
|
||||||
|
OVL5: file = "%O.5", start = __OVERLAYSTART__, size = __OVERLAYSIZE__;
|
||||||
|
OVL6ADDR: file = "%O.6", start = __OVERLAYSTART__ - 2, size = $0002;
|
||||||
|
OVL6: file = "%O.6", start = __OVERLAYSTART__, size = __OVERLAYSIZE__;
|
||||||
|
OVL7ADDR: file = "%O.7", start = __OVERLAYSTART__ - 2, size = $0002;
|
||||||
|
OVL7: file = "%O.7", start = __OVERLAYSTART__, size = __OVERLAYSIZE__;
|
||||||
|
OVL8ADDR: file = "%O.8", start = __OVERLAYSTART__ - 2, size = $0002;
|
||||||
|
OVL8: file = "%O.8", start = __OVERLAYSTART__, size = __OVERLAYSIZE__;
|
||||||
|
OVL9ADDR: file = "%O.9", start = __OVERLAYSTART__ - 2, size = $0002;
|
||||||
|
OVL9: file = "%O.9", start = __OVERLAYSTART__, size = __OVERLAYSIZE__;
|
||||||
|
}
|
||||||
|
SEGMENTS {
|
||||||
|
ZEROPAGE: load = ZP, type = zp;
|
||||||
|
LOADADDR: load = LOADADDR, type = ro;
|
||||||
|
EXEHDR: load = HEADER, type = ro;
|
||||||
|
STARTUP: load = MAIN, type = ro;
|
||||||
|
LOWCODE: load = MAIN, type = ro, optional = yes;
|
||||||
|
CODE: load = MAIN, type = ro;
|
||||||
|
ONCE: load = MAIN, type = ro, optional = yes;
|
||||||
|
RODATA: load = MAIN, type = ro;
|
||||||
|
DATA: load = MAIN, type = rw;
|
||||||
|
INIT: load = MAIN, type = bss;
|
||||||
|
BSS: load = MAIN, type = bss, define = yes;
|
||||||
|
OVL1ADDR: load = OVL1ADDR, type = ro;
|
||||||
|
OVERLAY1: load = OVL1, type = ro, define = yes, optional = yes;
|
||||||
|
OVL2ADDR: load = OVL2ADDR, type = ro;
|
||||||
|
OVERLAY2: load = OVL2, type = ro, define = yes, optional = yes;
|
||||||
|
OVL3ADDR: load = OVL3ADDR, type = ro;
|
||||||
|
OVERLAY3: load = OVL3, type = ro, define = yes, optional = yes;
|
||||||
|
OVL4ADDR: load = OVL4ADDR, type = ro;
|
||||||
|
OVERLAY4: load = OVL4, type = ro, define = yes, optional = yes;
|
||||||
|
OVL5ADDR: load = OVL5ADDR, type = ro;
|
||||||
|
OVERLAY5: load = OVL5, type = ro, define = yes, optional = yes;
|
||||||
|
OVL6ADDR: load = OVL6ADDR, type = ro;
|
||||||
|
OVERLAY6: load = OVL6, type = ro, define = yes, optional = yes;
|
||||||
|
OVL7ADDR: load = OVL7ADDR, type = ro;
|
||||||
|
OVERLAY7: load = OVL7, type = ro, define = yes, optional = yes;
|
||||||
|
OVL8ADDR: load = OVL8ADDR, type = ro;
|
||||||
|
OVERLAY8: load = OVL8, type = ro, define = yes, optional = yes;
|
||||||
|
OVL9ADDR: load = OVL9ADDR, type = ro;
|
||||||
|
OVERLAY9: load = OVL9, type = ro, define = yes, optional = yes;
|
||||||
|
}
|
||||||
|
FEATURES {
|
||||||
|
CONDES: type = constructor,
|
||||||
|
label = __CONSTRUCTOR_TABLE__,
|
||||||
|
count = __CONSTRUCTOR_COUNT__,
|
||||||
|
segment = ONCE;
|
||||||
|
CONDES: type = destructor,
|
||||||
|
label = __DESTRUCTOR_TABLE__,
|
||||||
|
count = __DESTRUCTOR_COUNT__,
|
||||||
|
segment = RODATA;
|
||||||
|
CONDES: type = interruptor,
|
||||||
|
label = __INTERRUPTOR_TABLE__,
|
||||||
|
count = __INTERRUPTOR_COUNT__,
|
||||||
|
segment = RODATA,
|
||||||
|
import = __CALLIRQ__;
|
||||||
|
}
|
||||||
20
cfg/plus4-asm.cfg
Normal file
20
cfg/plus4-asm.cfg
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
FEATURES {
|
||||||
|
STARTADDRESS: default = $1001;
|
||||||
|
}
|
||||||
|
SYMBOLS {
|
||||||
|
__LOADADDR__: type = import;
|
||||||
|
}
|
||||||
|
MEMORY {
|
||||||
|
ZP: file = "", start = $0002, size = $001A;
|
||||||
|
LOADADDR: file = %O, start = %S - 2, size = $0002;
|
||||||
|
MAIN: file = %O, start = %S, size = $FD00 - %S;
|
||||||
|
}
|
||||||
|
SEGMENTS {
|
||||||
|
ZEROPAGE: load = ZP, type = zp, optional = yes;
|
||||||
|
LOADADDR: load = LOADADDR, type = ro;
|
||||||
|
EXEHDR: load = MAIN, type = ro, optional = yes;
|
||||||
|
CODE: load = MAIN, type = ro;
|
||||||
|
RODATA: load = MAIN, type = ro, optional = yes;
|
||||||
|
DATA: load = MAIN, type = rw, optional = yes;
|
||||||
|
BSS: load = MAIN, type = bss, define = yes;
|
||||||
|
}
|
||||||
34
cfg/rp6502.cfg
Normal file
34
cfg/rp6502.cfg
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
SYMBOLS {
|
||||||
|
__STARTUP__: type = import;
|
||||||
|
__STACKSIZE__: type = weak, value = $0800;
|
||||||
|
}
|
||||||
|
MEMORY {
|
||||||
|
ZP: file = "", define = yes, start = $0000, size = $0100;
|
||||||
|
CPUSTACK: file = "", start = $0100, size = $0100;
|
||||||
|
RAM: file = %O, define = yes, start = $0200, size = $FD00 - __STACKSIZE__;
|
||||||
|
}
|
||||||
|
SEGMENTS {
|
||||||
|
ZEROPAGE: load = ZP, type = zp;
|
||||||
|
STARTUP: load = RAM, type = ro;
|
||||||
|
LOWCODE: load = RAM, type = ro, optional = yes;
|
||||||
|
ONCE: load = RAM, type = ro, optional = yes;
|
||||||
|
CODE: load = RAM, type = ro;
|
||||||
|
RODATA: load = RAM, type = ro;
|
||||||
|
DATA: load = RAM, type = rw, define = yes;
|
||||||
|
BSS: load = RAM, type = bss, define = yes;
|
||||||
|
}
|
||||||
|
FEATURES {
|
||||||
|
CONDES: type = constructor,
|
||||||
|
label = __CONSTRUCTOR_TABLE__,
|
||||||
|
count = __CONSTRUCTOR_COUNT__,
|
||||||
|
segment = ONCE;
|
||||||
|
CONDES: type = destructor,
|
||||||
|
label = __DESTRUCTOR_TABLE__,
|
||||||
|
count = __DESTRUCTOR_COUNT__,
|
||||||
|
segment = RODATA;
|
||||||
|
CONDES: type = interruptor,
|
||||||
|
label = __INTERRUPTOR_TABLE__,
|
||||||
|
count = __INTERRUPTOR_COUNT__,
|
||||||
|
segment = RODATA,
|
||||||
|
import = __CALLIRQ__;
|
||||||
|
}
|
||||||
@@ -1,12 +1,15 @@
|
|||||||
SYMBOLS {
|
SYMBOLS {
|
||||||
__EXEHDR__: type = import;
|
__EXEHDR__: type = import;
|
||||||
__STACKSIZE__: type = weak, value = $0800; # 2k stack
|
__STACKSIZE__: type = weak, value = $0800; # 2k stack
|
||||||
|
_peripherals: type = export, value = $FFC0;
|
||||||
}
|
}
|
||||||
|
|
||||||
MEMORY {
|
MEMORY {
|
||||||
ZP: file = "", start = $0000, size = $001B;
|
ZP: file = "", start = $0000, size = $0100;
|
||||||
HEADER: file = %O, start = $0000, size = $000C;
|
HEADER: file = %O, start = $0000, size = $000C;
|
||||||
MAIN: file = %O, define = yes, start = $0200, size = $FDF0 - __STACKSIZE__;
|
MAIN: file = %O, define = yes, start = $0200, size = $FFC0 - $0200 - __STACKSIZE__;
|
||||||
}
|
}
|
||||||
|
|
||||||
SEGMENTS {
|
SEGMENTS {
|
||||||
ZEROPAGE: load = ZP, type = zp;
|
ZEROPAGE: load = ZP, type = zp;
|
||||||
EXEHDR: load = HEADER, type = ro;
|
EXEHDR: load = HEADER, type = ro;
|
||||||
@@ -18,6 +21,7 @@ SEGMENTS {
|
|||||||
DATA: load = MAIN, type = rw;
|
DATA: load = MAIN, type = rw;
|
||||||
BSS: load = MAIN, type = bss, define = yes;
|
BSS: load = MAIN, type = bss, define = yes;
|
||||||
}
|
}
|
||||||
|
|
||||||
FEATURES {
|
FEATURES {
|
||||||
CONDES: type = constructor,
|
CONDES: type = constructor,
|
||||||
label = __CONSTRUCTOR_TABLE__,
|
label = __CONSTRUCTOR_TABLE__,
|
||||||
|
|||||||
@@ -1,12 +1,15 @@
|
|||||||
SYMBOLS {
|
SYMBOLS {
|
||||||
__EXEHDR__: type = import;
|
__EXEHDR__: type = import;
|
||||||
__STACKSIZE__: type = weak, value = $0800; # 2k stack
|
__STACKSIZE__: type = weak, value = $0800; # 2k stack
|
||||||
|
_peripherals: type = export, value = $FFC0;
|
||||||
}
|
}
|
||||||
|
|
||||||
MEMORY {
|
MEMORY {
|
||||||
ZP: file = "", start = $0000, size = $001B;
|
ZP: file = "", start = $0000, size = $0100;
|
||||||
HEADER: file = %O, start = $0000, size = $000C;
|
HEADER: file = %O, start = $0000, size = $000C;
|
||||||
MAIN: file = %O, define = yes, start = $0200, size = $FDF0 - __STACKSIZE__;
|
MAIN: file = %O, define = yes, start = $0200, size = $FFC0 - $0200 - __STACKSIZE__;
|
||||||
}
|
}
|
||||||
|
|
||||||
SEGMENTS {
|
SEGMENTS {
|
||||||
ZEROPAGE: load = ZP, type = zp;
|
ZEROPAGE: load = ZP, type = zp;
|
||||||
EXEHDR: load = HEADER, type = ro;
|
EXEHDR: load = HEADER, type = ro;
|
||||||
@@ -18,6 +21,7 @@ SEGMENTS {
|
|||||||
DATA: load = MAIN, type = rw;
|
DATA: load = MAIN, type = rw;
|
||||||
BSS: load = MAIN, type = bss, define = yes;
|
BSS: load = MAIN, type = bss, define = yes;
|
||||||
}
|
}
|
||||||
|
|
||||||
FEATURES {
|
FEATURES {
|
||||||
CONDES: type = constructor,
|
CONDES: type = constructor,
|
||||||
label = __CONSTRUCTOR_TABLE__,
|
label = __CONSTRUCTOR_TABLE__,
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# supervision 1284kbyte cartridge with bankswitching
|
# supervision 128kbyte cartridge with bankswitching
|
||||||
# for assembler
|
# for assembler
|
||||||
|
|
||||||
# ld65 config file
|
# ld65 config file
|
||||||
@@ -30,8 +30,23 @@ SEGMENTS {
|
|||||||
BANK5: load = BANKROM5, type = ro;
|
BANK5: load = BANKROM5, type = ro;
|
||||||
BANK6: load = BANKROM6, type = ro;
|
BANK6: load = BANKROM6, type = ro;
|
||||||
BANK7: load = BANKROM7, type = ro;
|
BANK7: load = BANKROM7, type = ro;
|
||||||
ZEROPAGE: load = RAM, type = bss, define = yes;
|
ZEROPAGE: load = RAM, type = zp, define = yes;
|
||||||
DATA: load = RAM, type = bss, define = yes, offset = $0200;
|
DATA: load = RAM, type = rw, define = yes, offset = $0200;
|
||||||
BSS: load = RAM, type = bss, define = yes;
|
BSS: load = RAM, type = bss, define = yes;
|
||||||
VECTOR: load = ROM, type = ro, offset = $3FFA;
|
VECTORS: load = ROM, type = ro, start = $FFFA;
|
||||||
|
}
|
||||||
|
FEATURES {
|
||||||
|
CONDES: type = constructor,
|
||||||
|
label = __CONSTRUCTOR_TABLE__,
|
||||||
|
count = __CONSTRUCTOR_COUNT__,
|
||||||
|
segment = ONCE;
|
||||||
|
CONDES: type = destructor,
|
||||||
|
label = __DESTRUCTOR_TABLE__,
|
||||||
|
count = __DESTRUCTOR_COUNT__,
|
||||||
|
segment = RODATA;
|
||||||
|
CONDES: type = interruptor,
|
||||||
|
label = __INTERRUPTOR_TABLE__,
|
||||||
|
count = __INTERRUPTOR_COUNT__,
|
||||||
|
segment = RODATA,
|
||||||
|
import = __CALLIRQ__;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,8 +20,8 @@ SEGMENTS {
|
|||||||
CODE: load = ROM, type = ro, define = yes;
|
CODE: load = ROM, type = ro, define = yes;
|
||||||
RODATA: load = ROM, type = ro, define = yes;
|
RODATA: load = ROM, type = ro, define = yes;
|
||||||
DATA: load = ROM, run = RAM, type = rw, define = yes;
|
DATA: load = ROM, run = RAM, type = rw, define = yes;
|
||||||
FFF0: load = ROM, type = ro, offset = $3FF0;
|
FFF0: load = ROM, type = ro, start = $FFF0;
|
||||||
VECTOR: load = ROM, type = ro, offset = $3FFA;
|
VECTORS: load = ROM, type = ro, start = $FFFA;
|
||||||
BSS: load = RAM, type = bss, define = yes;
|
BSS: load = RAM, type = bss, define = yes;
|
||||||
}
|
}
|
||||||
FEATURES {
|
FEATURES {
|
||||||
|
|||||||
@@ -23,8 +23,23 @@ SEGMENTS {
|
|||||||
BANK1: load = BANKROM1, type = ro;
|
BANK1: load = BANKROM1, type = ro;
|
||||||
BANK2: load = BANKROM2, type = ro;
|
BANK2: load = BANKROM2, type = ro;
|
||||||
BANK3: load = BANKROM3, type = ro;
|
BANK3: load = BANKROM3, type = ro;
|
||||||
ZEROPAGE: load = RAM, type = bss, define = yes;
|
ZEROPAGE: load = RAM, type = zp, define = yes;
|
||||||
DATA: load = RAM, type = bss, define = yes, offset = $0200;
|
DATA: load = RAM, type = rw, define = yes, offset = $0200;
|
||||||
BSS: load = RAM, type = bss, define = yes;
|
BSS: load = RAM, type = bss, define = yes;
|
||||||
VECTOR: load = ROM, type = ro, offset = $3FFA;
|
VECTORS: load = ROM, type = ro, start = $FFFA;
|
||||||
|
}
|
||||||
|
FEATURES {
|
||||||
|
CONDES: type = constructor,
|
||||||
|
label = __CONSTRUCTOR_TABLE__,
|
||||||
|
count = __CONSTRUCTOR_COUNT__,
|
||||||
|
segment = ONCE;
|
||||||
|
CONDES: type = destructor,
|
||||||
|
label = __DESTRUCTOR_TABLE__,
|
||||||
|
count = __DESTRUCTOR_COUNT__,
|
||||||
|
segment = RODATA;
|
||||||
|
CONDES: type = interruptor,
|
||||||
|
label = __INTERRUPTOR_TABLE__,
|
||||||
|
count = __INTERRUPTOR_COUNT__,
|
||||||
|
segment = RODATA,
|
||||||
|
import = __CALLIRQ__;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,8 +19,8 @@ SEGMENTS {
|
|||||||
CODE: load = ROM, type = ro, define = yes;
|
CODE: load = ROM, type = ro, define = yes;
|
||||||
RODATA: load = ROM, type = ro, define = yes;
|
RODATA: load = ROM, type = ro, define = yes;
|
||||||
DATA: load = ROM, run = RAM, type = rw, define = yes;
|
DATA: load = ROM, run = RAM, type = rw, define = yes;
|
||||||
FFF0: load = ROM, type = ro, offset = $7FF0;
|
FFF0: load = ROM, type = ro, start = $FFF0;
|
||||||
VECTOR: load = ROM, type = ro, offset = $7FFA;
|
VECTORS: load = ROM, type = ro, start = $FFFA;
|
||||||
BSS: load = RAM, type = bss, define = yes;
|
BSS: load = RAM, type = bss, define = yes;
|
||||||
}
|
}
|
||||||
FEATURES {
|
FEATURES {
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user