mirror of https://github.com/cc65/cc65.git
Merge branch 'master' into issue-479
This commit is contained in:
commit
91d1f43ddd
|
@ -0,0 +1,56 @@
|
|||
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:
|
||||
- shell: bash
|
||||
run: git config --global core.autocrlf input
|
||||
|
||||
- name: Checkout Source
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Install Dependencies
|
||||
shell: bash
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install linuxdoc-tools linuxdoc-tools-info binutils-mingw-w64-i686 gcc-mingw-w64-i686 sshpass
|
||||
|
||||
- name: Build
|
||||
id: build
|
||||
shell: bash
|
||||
run: |
|
||||
make -j2 bin USER_CFLAGS=-Werror
|
||||
make -j2 lib QUIET=1
|
||||
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
|
||||
|
||||
build_windows:
|
||||
name: Build (Windows)
|
||||
runs-on: windows-latest
|
||||
|
||||
steps:
|
||||
- shell: bash
|
||||
run: git config --global core.autocrlf input
|
||||
|
||||
- name: Checkout Source
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Add msbuild to PATH
|
||||
uses: microsoft/setup-msbuild@v1.1
|
||||
|
||||
- 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
|
|
@ -0,0 +1,69 @@
|
|||
name: Snapshot Build
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
master
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build_windows:
|
||||
name: Build (Windows)
|
||||
runs-on: windows-latest
|
||||
|
||||
steps:
|
||||
- shell: bash
|
||||
run: git config --global core.autocrlf input
|
||||
|
||||
- name: Checkout Source
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Add msbuild to PATH
|
||||
uses: microsoft/setup-msbuild@v1.1
|
||||
|
||||
- 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 Snaphot (Linux)
|
||||
runs-on: ubuntu-latest
|
||||
needs: build_windows
|
||||
|
||||
steps:
|
||||
- shell: bash
|
||||
run: git config --global core.autocrlf input
|
||||
|
||||
- name: Checkout Source
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Install Dependencies
|
||||
shell: bash
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install linuxdoc-tools linuxdoc-tools-info binutils-mingw-w64-i686 gcc-mingw-w64-i686 sshpass
|
||||
|
||||
- name: Build
|
||||
id: build
|
||||
shell: bash
|
||||
run: |
|
||||
make -j2 bin USER_CFLAGS=-Werror
|
||||
make -j2 lib QUIET=1
|
||||
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
|
||||
|
||||
- name: Upload Snapshot Zip
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: cc65-snapshot-win32.zip
|
||||
path: cc65.zip
|
||||
|
||||
# TODO: Update docs at https://github.com/cc65/doc
|
||||
# TODO: Publish snapshot zip at https://github.com/cc65/cc65.github.io
|
40
.travis.yml
40
.travis.yml
|
@ -1,14 +1,26 @@
|
|||
language:
|
||||
- c
|
||||
install:
|
||||
- sudo apt-get update
|
||||
- sudo apt-get install linuxdoc-tools linuxdoc-tools-info binutils-mingw-w64-i686 gcc-mingw-w64-i686 sshpass
|
||||
script:
|
||||
- make bin USER_CFLAGS=-Werror
|
||||
- make lib QUIET=1
|
||||
- make -C test QUIET=1
|
||||
- make -C src clean
|
||||
- make bin USER_CFLAGS=-Werror CROSS_COMPILE=i686-w64-mingw32-
|
||||
- make doc zip
|
||||
after_success:
|
||||
- make -f Makefile.travis
|
||||
language: c
|
||||
|
||||
jobs:
|
||||
include:
|
||||
|
||||
- os: linux
|
||||
name: Linux
|
||||
install:
|
||||
- sudo apt-get update
|
||||
- sudo apt-get install linuxdoc-tools linuxdoc-tools-info binutils-mingw-w64-i686 gcc-mingw-w64-i686 sshpass
|
||||
script:
|
||||
- make -j2 bin USER_CFLAGS=-Werror
|
||||
- make -j2 lib QUIET=1
|
||||
- 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
|
||||
|
|
5
Makefile
5
Makefile
|
@ -1,4 +1,4 @@
|
|||
.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
|
||||
|
||||
.SUFFIXES:
|
||||
|
||||
|
@ -20,6 +20,9 @@ doc html info:
|
|||
samples:
|
||||
@$(MAKE) -C samples --no-print-directory $@
|
||||
|
||||
test:
|
||||
@$(MAKE) -C test --no-print-directory $@
|
||||
|
||||
%65:
|
||||
@$(MAKE) -C src --no-print-directory $@
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
[Wiki](https://github.com/cc65/wiki/wiki)
|
||||
|
||||
[![Build Status](https://api.travis-ci.org/cc65/cc65.svg?branch=master)](https://travis-ci.org/cc65/cc65/builds)
|
||||
[![Snapshot Build](https://github.com/cc65/cc65/actions/workflows/snapshot-on-push-master.yml/badge.svg?branch=master)](https://github.com/cc65/cc65/actions/workflows/snapshot-on-push-master.yml)
|
||||
|
||||
cc65 is a complete cross development package for 65(C)02 systems, including
|
||||
a powerful macro assembler, a C compiler, linker, librarian and several
|
||||
|
@ -35,6 +35,8 @@ including
|
|||
- the Oric Telestrat.
|
||||
- the Lynx console.
|
||||
- the Ohio Scientific Challenger 1P.
|
||||
- the Commander X16.
|
||||
- the Synertek Systems Sym-1.
|
||||
|
||||
The libraries are fairly portable, so creating a version for other 6502s
|
||||
shouldn't be too much work.
|
||||
|
|
|
@ -15,6 +15,7 @@ PROMPT := $33 ; Used by GETLN
|
|||
RNDL := $4E ; Random counter low
|
||||
RNDH := $4F ; Random counter high
|
||||
HIMEM := $73 ; Highest available memory address+1
|
||||
CURLIN := $75 ; Current line number being executed
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
; Vectors
|
||||
|
|
|
@ -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_INSERT = KEY_GREATERTHAN | KEY_SHIFT
|
||||
|
||||
KEY_UP = KEY_UNDERLINE | KEY_CTRL
|
||||
KEY_UP = KEY_DASH | KEY_CTRL
|
||||
KEY_DOWN = KEY_EQUALS | KEY_CTRL
|
||||
KEY_LEFT = KEY_PLUS | KEY_CTRL
|
||||
KEY_RIGHT = KEY_ASTERISK | KEY_CTRL
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
|
||||
TXTPTR := $3D ; Pointer into BASIC source code
|
||||
STATUS := $90 ; Kernal I/O completion status
|
||||
TIME := $A0 ; 60HZ clock
|
||||
FNAM_LEN := $B7 ; Length of filename
|
||||
SECADR := $B9 ; Secondary address
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
VARTAB := $2D ; Pointer to start of BASIC variables
|
||||
MEMSIZE := $37 ; Pointer to highest BASIC RAM location (+1)
|
||||
TXTPTR := $7A ; Pointer into BASIC source code
|
||||
STATUS := $90 ; Kernal I/O completion status
|
||||
TIME := $A0 ; 60 HZ clock
|
||||
FNAM_LEN := $B7 ; Length of filename
|
||||
SECADR := $B9 ; Secondary address
|
||||
|
@ -76,6 +77,8 @@ VIC_SPR_EXP_Y := $D017
|
|||
VIC_SPR_EXP_X := $D01D
|
||||
VIC_SPR_MCOLOR := $D01C
|
||||
VIC_SPR_BG_PRIO := $D01B
|
||||
VIC_SPR_COLL := $D01E
|
||||
VIC_SPR_BG_COLL := $D01F
|
||||
|
||||
VIC_SPR_MCOLOR0 := $D025
|
||||
VIC_SPR_MCOLOR1 := $D026
|
||||
|
|
|
@ -46,6 +46,7 @@
|
|||
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
|
||||
|
|
|
@ -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
|
|
@ -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_6502 = $0002
|
||||
CPU_ISET_6502X = $0004
|
||||
CPU_ISET_65SC02 = $0008
|
||||
CPU_ISET_65C02 = $0010
|
||||
CPU_ISET_65816 = $0020
|
||||
CPU_ISET_SWEET16 = $0040
|
||||
CPU_ISET_HUC6280 = $0080
|
||||
;CPU_ISET_M740 = $0100 not actually implemented
|
||||
CPU_ISET_4510 = $0200
|
||||
CPU_ISET_6502DTV = $0008
|
||||
CPU_ISET_65SC02 = $0010
|
||||
CPU_ISET_65C02 = $0020
|
||||
CPU_ISET_65816 = $0040
|
||||
CPU_ISET_SWEET16 = $0080
|
||||
CPU_ISET_HUC6280 = $0100
|
||||
;CPU_ISET_M740 = $0200 not actually implemented
|
||||
CPU_ISET_4510 = $0400
|
||||
|
||||
; CPU capabilities
|
||||
CPU_NONE = CPU_ISET_NONE
|
||||
CPU_6502 = CPU_ISET_6502
|
||||
CPU_6502X = CPU_ISET_6502|CPU_ISET_6502X
|
||||
CPU_6502DTV = CPU_ISET_6502|CPU_ISET_6502X|CPU_ISET_6502DTV
|
||||
CPU_65SC02 = CPU_ISET_6502|CPU_ISET_65SC02
|
||||
CPU_65C02 = CPU_ISET_6502|CPU_ISET_65SC02|CPU_ISET_65C02
|
||||
CPU_65816 = CPU_ISET_6502|CPU_ISET_65SC02|CPU_ISET_65816
|
||||
|
|
|
@ -5,21 +5,21 @@
|
|||
;** Screen
|
||||
SCREEN_ROWS = 24
|
||||
SCREEN_COLS = 32
|
||||
SCREEN_PTR = $3A
|
||||
CURSOR_X = $3C
|
||||
CURSOR_Y = $3D
|
||||
SCREEN_PTR := $3A
|
||||
CURSOR_X := $3C
|
||||
CURSOR_Y := $3D
|
||||
|
||||
;** VDP
|
||||
VDP_DATA_R = $2000
|
||||
VDP_STATUS_R = $2001
|
||||
VDP_DATA_W = $3000
|
||||
VDP_CONTROL_W = $3001
|
||||
VDP_DATA_R := $2000
|
||||
VDP_STATUS_R := $2001
|
||||
VDP_DATA_W := $3000
|
||||
VDP_CONTROL_W := $3001
|
||||
|
||||
;** PIA
|
||||
PIA0_DATA = $1000
|
||||
PIA0_STATUS = $1001
|
||||
PIA1_DATA = $1002
|
||||
PIA1_STATUS = $1003
|
||||
PIA0_DATA := $1000
|
||||
PIA0_STATUS := $1001
|
||||
PIA1_DATA := $1002
|
||||
PIA1_STATUS := $1003
|
||||
|
||||
;** General
|
||||
CH_VLINE = 33
|
||||
|
@ -30,11 +30,11 @@ CH_LLCORNER = 37
|
|||
CH_LRCORNER = 38
|
||||
|
||||
;** I/O (Zero-page variables)
|
||||
ZP_KEYBOARD = $10
|
||||
ZP_JOY0_DIR = $11
|
||||
ZP_JOY1_DIR = $13
|
||||
ZP_JOY0_BUTTONS = $16
|
||||
ZP_JOY1_BUTTONS = $17
|
||||
ZP_KEYBOARD := $10
|
||||
ZP_JOY0_DIR := $11
|
||||
ZP_JOY1_DIR := $13
|
||||
ZP_JOY0_BUTTONS := $16
|
||||
ZP_JOY1_BUTTONS := $17
|
||||
|
||||
;** Joystick direction values (ZP_JOY0_DIR/ZP_JOY1_DIR)
|
||||
JOY_N = $49
|
||||
|
@ -54,8 +54,13 @@ JOY_WNW = $4C
|
|||
JOY_NW = $4B
|
||||
JOY_NNW = $4A
|
||||
|
||||
;** BIOS
|
||||
BIOS_IRQ1_ADDR = $FF3F
|
||||
BIOS_IRQ2_ADDR = $FF52
|
||||
BIOS_NMI_RESET_ADDR = $F808
|
||||
BIOS_WRITE_VDP_REG = $FE1F
|
||||
;** BIOS routines
|
||||
BIOS_NMI_RESET_ADDR := $F808
|
||||
BIOS_PLAY_TUNE1 := $FBD6
|
||||
BIOS_PLAY_SONG := $FBED
|
||||
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,5 +1,5 @@
|
|||
;
|
||||
; CX16 r37 definitions
|
||||
; CX16 r38 definitions
|
||||
;
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
|
@ -439,7 +439,7 @@ NMIVec := $0318
|
|||
.scope PSG ; Programmable Sound Generator
|
||||
.struct
|
||||
PITCH .word
|
||||
VOL .byte ; Left, right channels; volume
|
||||
VOL .byte ; Right, left sides; volume
|
||||
WAVEFORM .byte ; Wave shape, pulse width
|
||||
.endstruct
|
||||
LEFT = %01 << 6
|
||||
|
@ -544,9 +544,11 @@ NMIVec := $0318
|
|||
VERALOG .byte ; Boolean: log VERA activity
|
||||
KEYBOARDLOG .byte ; Boolean: log keyboard data
|
||||
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
|
||||
.org $9FBD
|
||||
.res 2
|
||||
CYCLECOUNT .dword ; Running count of CPU cycles (Read-Only)
|
||||
.res 1
|
||||
KEYMAP .byte ; Current keyboard layout number (Read-Only)
|
||||
DETECT .byte 2 ; If is "16" string, then running on emulator (RO)
|
||||
.endstruct
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
;/* */
|
||||
;/* */
|
||||
;/* (C) 2002-2003 Ullrich von Bassewitz */
|
||||
;/* Römerstrasse 52 */
|
||||
;/* Roemerstrasse 52 */
|
||||
;/* D-70794 Filderstadt */
|
||||
;/* EMail: uz@cc65.org */
|
||||
;/* */
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
;/* */
|
||||
;/* */
|
||||
;/* (C) 2002-2006, Ullrich von Bassewitz */
|
||||
;/* Römerstraße 52 */
|
||||
;/* Roemerstrasse 52 */
|
||||
;/* D-70794 Filderstadt */
|
||||
;/* EMail: uz@cc65.org */
|
||||
;/* */
|
||||
|
|
|
@ -505,4 +505,12 @@ OPC_ISC_aby = $FB
|
|||
OPC_NOP_abx = $FC
|
||||
OPC_ISC_abx = $FF
|
||||
|
||||
.if (.cpu .bitand ::CPU_ISET_6502DTV)
|
||||
|
||||
OPC_BRA = $12
|
||||
OPC_SAC_imm = $32
|
||||
OPC_SIR_imm = $42
|
||||
|
||||
.endif
|
||||
|
||||
.endif
|
||||
|
|
|
@ -10,6 +10,7 @@ TMPPTR := $22 ; Temporary ptr used by BASIC
|
|||
VARTAB := $2D ; Pointer to start of BASIC variables
|
||||
MEMSIZE := $37 ; Pointer to highest BASIC RAM location (+1)
|
||||
TXTPTR := $3B ; Pointer into BASIC source code
|
||||
STATUS := $90 ; Kernal I/O completion status
|
||||
TIME := $A3 ; 60HZ clock
|
||||
FNAM_LEN := $AB ; Length of filename
|
||||
LFN := $AC ; Logical file number
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
;* *
|
||||
;* *
|
||||
;*(C) 2003-2006, Ullrich von Bassewitz *
|
||||
;* Römerstrasse 52 *
|
||||
;* Roemerstrasse 52 *
|
||||
;* D-70794 Filderstadt *
|
||||
;*EMail: uz@cc65.org *
|
||||
;* *
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
;* */
|
||||
;* */
|
||||
;* (C) 2003-2005, Ullrich von Bassewitz */
|
||||
;* Römerstrasse 52 */
|
||||
;* Roemerstrasse 52 */
|
||||
;* D-70794 Filderstadt */
|
||||
;* EMail: uz@cc65.org */
|
||||
;* */
|
||||
|
@ -44,7 +44,9 @@ EOF = -1
|
|||
.if .defined(__APPLE2__)
|
||||
FILENAME_MAX = 64+1
|
||||
.elseif .defined(__ATARI__)
|
||||
FILENAME_MAX = 12+1
|
||||
FILENAME_MAX = 63+1
|
||||
.elseif .defined(__CBM__)
|
||||
FILENAME_MAX = 255
|
||||
.elseif .defined(__LUNIX__)
|
||||
FILENAME_MAX = 80+1
|
||||
.elseif .defined(__TELESTRAT__)
|
||||
|
|
|
@ -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 ;
|
|
@ -48,33 +48,33 @@ TR7 := $13
|
|||
|
||||
DEFAFF := $14
|
||||
|
||||
IRQSVA := $21 ; Used to save A 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
|
||||
IRQSVP := $24 ; Used to save P 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
|
||||
IRQSVY := $23 ; Used to save Y when a BRK call occurs
|
||||
IRQSVP := $24 ; Used to save P when a BRK call occurs
|
||||
|
||||
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 TELEMON 3.x
|
||||
|
||||
ADCLK := $40 ; Address for clock display
|
||||
ADCLK := $40 ; Address for clock display
|
||||
TIMEUS := $42
|
||||
TIMEUD := $44
|
||||
TIMEUD := $44 ; Counter clock (1/10 of a second)
|
||||
|
||||
|
||||
HRSX := $46
|
||||
HRSY := $47
|
||||
|
||||
XLPRBI := $48 ; Printer flag (b7)
|
||||
XLPRBI := $48 ; Printer flag (b7)
|
||||
|
||||
HRSX40 := $49
|
||||
HRSX6 := $4A
|
||||
|
||||
ADHRS := $4B ; Hires screen address (word)
|
||||
ADHRS := $4B ; Hires screen address (word)
|
||||
|
||||
HRS1 := $4D
|
||||
HRS2 := $4F
|
||||
|
@ -277,6 +277,7 @@ XRECLK = $3C ; Reset clock
|
|||
XCLCL = $3D ; Close clock
|
||||
XWRCLK = $3E ; Displays clock in the adress in A & Y registers
|
||||
|
||||
; Sound primitives
|
||||
XSONPS = $40 ; Send data to PSG register (14 values)
|
||||
XOUPS = $42 ; Send Oups sound into PSG
|
||||
XPLAY = $43 ; Play a sound
|
||||
|
@ -284,10 +285,25 @@ XSOUND = $44
|
|||
XMUSIC = $45
|
||||
XZAP = $46 ; Send Zap sound to PSG
|
||||
XSHOOT = $47
|
||||
|
||||
; Path Management
|
||||
XGETCWD = $48 ; Get current CWD
|
||||
XPUTCWD = $49 ; Chdir
|
||||
|
||||
; File management
|
||||
XMKDIR = $4B ; Create a folder. Only available in TELEMON 3.x (bank 7 of Orix)
|
||||
|
||||
XHCHRS = $4C ; Hard copy hires
|
||||
|
||||
; File management
|
||||
XRM = $4D ; Remove a folder or a file. Only available in TELEMON 3.x (bank 7 of Orix)
|
||||
|
||||
XFWR = $4E ; Put a char on the first screen. Only available in TELEMON 3.x (bank 7 of Orix)
|
||||
XGOKBD = $52
|
||||
|
||||
; Keyboard primitives
|
||||
XALLKB = $50 ; Read Keyboard, and populate KBDCOL
|
||||
XKBDAS = $51 ; Ascii conversion
|
||||
XGOKBD = $52 ; Swap keyboard type (Qwerty, French ...)
|
||||
|
||||
; Buffer management
|
||||
XECRBU = $54 ; Write A or AY in the buffer
|
||||
|
@ -299,8 +315,27 @@ XDEFBU = $59 ; Reset all value of the buffer
|
|||
XBUSY = $5A ; Test if the buffer is empty
|
||||
|
||||
XMALLOC = $5B ; Only in TELEMON 3.x (bank 7 of Orix)
|
||||
|
||||
; 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 TELEMON 3.x (bank 7 of 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 & 3.x : if RS232 buffer is full, the Oric Telestrat freezes
|
||||
|
||||
XHRSSE = $8C ; Set hires position cursor
|
||||
XDRAWA = $8D ; Draw a line absolute
|
||||
XDRAWR = $8E ; Draw a line (relative)
|
||||
|
@ -324,7 +359,7 @@ PWD_PTR = $00
|
|||
|
||||
; ---------------------------------------------------------------------------
|
||||
;
|
||||
BUFTRV := $100
|
||||
BUFTRV := $100
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
|
@ -337,7 +372,7 @@ FLGTEL := $20D
|
|||
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
|
||||
; Time management
|
||||
TIMED := $210
|
||||
TIMED := $210 ; Clock (1/10 of seconds)
|
||||
TIMES := $211
|
||||
TIMEM := $212
|
||||
TIMEH := $213
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
;/* */
|
||||
;/* */
|
||||
;/* (C) 2003 Ullrich von Bassewitz */
|
||||
;/* Römerstrasse 52 */
|
||||
;/* Roemerstrasse 52 */
|
||||
;/* D-70794 Filderstadt */
|
||||
;/* 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
|
||||
|
||||
VARTAB := $2D ; Pointer to start of BASIC variables
|
||||
MEMSIZE := $37 ; Pointer to highest BASIC RAM location (+1)
|
||||
TXTPTR := $7A ; Pointer into BASIC source code
|
||||
STATUS := $90 ; Kernal I/O completion status
|
||||
TIME := $A0 ; 60HZ clock
|
||||
FNAM_LEN := $B7 ; Length of filename
|
||||
SECADR := $B9 ; Secondary address
|
||||
|
@ -35,6 +35,8 @@ KBDREPEAT := $28a
|
|||
KBDREPEATRATE := $28b
|
||||
KBDREPEATDELAY := $28c
|
||||
|
||||
RSSTAT := $297 ; RS-232 device driver status
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; Screen size
|
||||
|
||||
|
@ -88,7 +90,7 @@ VIA1_T1LH := VIA1+$7 ; Timer 1 latch, high byte
|
|||
VIA1_T2CL := VIA1+$8 ; Timer 2, low byte
|
||||
VIA1_T2CH := VIA1+$9 ; Timer 2, high byte
|
||||
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_IFR := VIA1+$D ; Interrupt flag 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_T2CH := VIA2+$9 ; Timer 2, high byte
|
||||
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_IFR := VIA2+$D ; Interrupt flag register
|
||||
VIA2_IER := VIA2+$E ; Interrupt enable register
|
||||
|
|
|
@ -23,8 +23,8 @@ SEGMENTS {
|
|||
EXEHDR: load = HEADER, type = ro, optional = yes;
|
||||
STARTUP: load = MAIN, type = ro;
|
||||
LOWCODE: load = MAIN, type = ro, optional = yes;
|
||||
HGR: load = MAIN, type = rw, optional = yes, start = $2000;
|
||||
CODE: load = MAIN, type = ro start = $4000;
|
||||
HGR: load = MAIN, type = rw, start = $2000;
|
||||
CODE: load = MAIN, type = ro start = $4000;
|
||||
RODATA: load = MAIN, type = ro;
|
||||
DATA: load = MAIN, type = rw;
|
||||
INIT: load = MAIN, type = rw;
|
||||
|
|
|
@ -23,8 +23,8 @@ SEGMENTS {
|
|||
EXEHDR: load = HEADER, type = ro, optional = yes;
|
||||
STARTUP: load = MAIN, type = ro;
|
||||
LOWCODE: load = MAIN, type = ro, optional = yes;
|
||||
HGR: load = MAIN, type = rw, optional = yes, start = $2000;
|
||||
CODE: load = MAIN, type = ro start = $4000;
|
||||
HGR: load = MAIN, type = rw, start = $2000;
|
||||
CODE: load = MAIN, type = ro start = $4000;
|
||||
RODATA: load = MAIN, type = ro;
|
||||
DATA: load = MAIN, type = rw;
|
||||
INIT: load = MAIN, type = rw;
|
||||
|
|
|
@ -8,39 +8,40 @@ FEATURES {
|
|||
}
|
||||
SYMBOLS {
|
||||
__EXEHDR__: type = import;
|
||||
__SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk
|
||||
__AUTOSTART__: type = import; # force inclusion of autostart "trailer"
|
||||
__STACKSIZE__: type = weak, value = $0800; # 2k stack
|
||||
__SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk
|
||||
__AUTOSTART__: type = import; # force inclusion of autostart "trailer"
|
||||
__STACKSIZE__: type = weak, value = $0800; # 2k stack
|
||||
__CHARGENSIZE__: type = weak, value = $0400;
|
||||
__STARTADDRESS__: type = export, value = %S;
|
||||
}
|
||||
MEMORY {
|
||||
ZP: file = "", define = yes, start = $0082, size = $007E;
|
||||
ZP: file = "", define = yes, start = $0082, size = $007E;
|
||||
|
||||
# just $FFFF
|
||||
HEADER: file = %O, start = $0000, size = $0002;
|
||||
HEADER: file = %O, start = $0000, size = $0002;
|
||||
|
||||
# "system check" load chunk
|
||||
SYSCHKHDR: file = %O, start = $0000, size = $0004;
|
||||
SYSCHKCHNK: file = %O, start = $2E00, size = $0300;
|
||||
SYSCHKTRL: file = %O, start = $0000, size = $0006;
|
||||
SYSCHKHDR: file = %O, start = $0000, size = $0004;
|
||||
SYSCHKCHNK: file = %O, start = $2E00, size = $0300;
|
||||
SYSCHKTRL: file = %O, start = $0000, size = $0006;
|
||||
|
||||
# "shadow RAM preparation" load chunk
|
||||
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
|
||||
SRPREPTRL: file = %O, start = $0000, size = $0006;
|
||||
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
|
||||
SRPREPTRL: file = %O, start = $0000, size = $0006;
|
||||
|
||||
# "main program" load chunk
|
||||
MAINHDR: file = %O, start = $0000, size = $0004;
|
||||
MAIN: file = %O, define = yes, start = %S + __LOWBSS_SIZE__, size = $D000 - __STACKSIZE__ - %S - __LOWBSS_SIZE__;
|
||||
MAINHDR: file = %O, start = $0000, size = $0004;
|
||||
MAIN: file = %O, define = yes, start = %S + __LOWBSS_SIZE__, size = $D000 - __STACKSIZE__ - %S - __LOWBSS_SIZE__;
|
||||
|
||||
# defines entry point into program
|
||||
TRAILER: file = %O, start = $0000, size = $0006;
|
||||
TRAILER: file = %O, start = $0000, size = $0006;
|
||||
|
||||
# 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
|
||||
HIDDEN_RAM: file = "", define = yes, start = $DC00, size = $FFFA - $DC00;
|
||||
HIDDEN_RAM: file = "", define = yes, start = $D800 + __CHARGENSIZE__, size = $FFFA - $D800 - __CHARGENSIZE__;
|
||||
}
|
||||
SEGMENTS {
|
||||
ZEROPAGE: load = ZP, type = zp;
|
||||
|
@ -53,7 +54,7 @@ SEGMENTS {
|
|||
SYSCHKTRL: load = SYSCHKTRL, type = ro, optional = yes;
|
||||
|
||||
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;
|
||||
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;
|
||||
|
|
|
@ -3,44 +3,45 @@ FEATURES {
|
|||
}
|
||||
SYMBOLS {
|
||||
__EXEHDR__: type = import;
|
||||
__SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk
|
||||
__AUTOSTART__: type = import; # force inclusion of autostart "trailer"
|
||||
__STACKSIZE__: type = weak, value = $0800; # 2k stack
|
||||
__OVERLAYSIZE__: type = weak, value = $1000; # 4k overlay
|
||||
__SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk
|
||||
__AUTOSTART__: type = import; # force inclusion of autostart "trailer"
|
||||
__STACKSIZE__: type = weak, value = $0800; # 2k stack
|
||||
__CHARGENSIZE__: type = weak, value = $0400;
|
||||
__OVERLAYSIZE__: type = weak, value = $1000; # 4k overlay
|
||||
__STARTADDRESS__: type = export, value = %S;
|
||||
}
|
||||
MEMORY {
|
||||
ZP: file = "", define = yes, start = $0082, size = $007E;
|
||||
ZP: file = "", define = yes, start = $0082, size = $007E;
|
||||
|
||||
# just $FFFF
|
||||
HEADER: file = %O, start = $0000, size = $0002;
|
||||
HEADER: file = %O, start = $0000, size = $0002;
|
||||
|
||||
# "system check" load chunk
|
||||
SYSCHKHDR: file = %O, start = $0000, size = $0004;
|
||||
SYSCHKCHNK: file = %O, start = $2E00, size = $0300;
|
||||
SYSCHKTRL: file = %O, start = $0000, size = $0006;
|
||||
SYSCHKHDR: file = %O, start = $0000, size = $0004;
|
||||
SYSCHKCHNK: file = %O, start = $2E00, size = $0300;
|
||||
SYSCHKTRL: file = %O, start = $0000, size = $0006;
|
||||
|
||||
# "shadow RAM preparation" load chunk
|
||||
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
|
||||
SRPREPTRL: file = %O, start = $0000, size = $0006;
|
||||
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
|
||||
SRPREPTRL: file = %O, start = $0000, size = $0006;
|
||||
|
||||
# "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__ +
|
||||
__LOWBSS_SIZE__, size = $D000 - __STACKSIZE__ - %S - __OVERLAYSIZE__ - __LOWBSS_SIZE__;
|
||||
__LOWBSS_SIZE__, size = $D000 - __STACKSIZE__ - %S - __OVERLAYSIZE__ - __LOWBSS_SIZE__;
|
||||
|
||||
# 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
|
||||
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)
|
||||
CHARGEN: file = "", define = yes, start = $E000, size = $0400;
|
||||
CHARGEN: file = "", define = yes, start = $E000, size = __CHARGENSIZE__;
|
||||
|
||||
# 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
|
||||
OVL1: file = "%O.1", start = %S, size = __OVERLAYSIZE__;
|
||||
|
@ -64,7 +65,7 @@ SEGMENTS {
|
|||
SYSCHKTRL: load = SYSCHKTRL, type = ro, optional = yes;
|
||||
|
||||
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;
|
||||
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;
|
||||
|
|
|
@ -4,35 +4,36 @@ FEATURES {
|
|||
STARTADDRESS: default = $2400;
|
||||
}
|
||||
SYMBOLS {
|
||||
__SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk
|
||||
__STACKSIZE__: type = weak, value = $0800; # 2k stack
|
||||
__SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk
|
||||
__STACKSIZE__: type = weak, value = $0800; # 2k stack
|
||||
__STARTADDRESS__: type = export, value = %S;
|
||||
__CHARGENSIZE__: type = weak, value = $0400;
|
||||
__SYSCHKHDR__: type = export, value = 0; # Disable system check header
|
||||
__SYSCHKTRL__: type = export, value = 0; # Disable system check trailer
|
||||
}
|
||||
MEMORY {
|
||||
ZP: file = "", define = yes, start = $0082, size = $007E;
|
||||
ZP: file = "", define = yes, start = $0082, size = $007E;
|
||||
|
||||
# "system check" load chunk
|
||||
SYSCHKCHNK: file = %O, start = $2E00, size = $0300;
|
||||
SYSCHKCHNK: file = %O, start = $2E00, size = $0300;
|
||||
|
||||
# "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: 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
|
||||
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)
|
||||
CHARGEN: file = "", define = yes, start = $E000, size = $0400;
|
||||
CHARGEN: file = "", define = yes, start = $E000, size = __CHARGENSIZE__;
|
||||
|
||||
# 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: file = "", start = $0, size = $10;
|
||||
UNUSED: file = "", start = $0, size = $10;
|
||||
}
|
||||
FILES {
|
||||
%O: format = atari;
|
||||
|
@ -47,7 +48,7 @@ SEGMENTS {
|
|||
EXTZP: load = ZP, type = zp, 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;
|
||||
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;
|
||||
|
|
|
@ -6,39 +6,40 @@ SYMBOLS {
|
|||
__SYSTEM_CHECK__: type = import; # force inclusion of "system check" load chunk
|
||||
__AUTOSTART__: type = import; # force inclusion of autostart "trailer"
|
||||
__STACKSIZE__: type = weak, value = $0800; # 2k stack
|
||||
__CHARGENSIZE__: type = weak, value = $0400;
|
||||
__STARTADDRESS__: type = export, value = %S;
|
||||
}
|
||||
MEMORY {
|
||||
ZP: file = "", define = yes, start = $0082, size = $007E;
|
||||
ZP: file = "", define = yes, start = $0082, size = $007E;
|
||||
|
||||
# just $FFFF
|
||||
HEADER: file = %O, start = $0000, size = $0002;
|
||||
HEADER: file = %O, start = $0000, size = $0002;
|
||||
|
||||
# "system check" load chunk
|
||||
SYSCHKHDR: file = %O, start = $0000, size = $0004;
|
||||
SYSCHKCHNK: file = %O, start = $2E00, size = $0300;
|
||||
SYSCHKTRL: file = %O, start = $0000, size = $0006;
|
||||
SYSCHKHDR: file = %O, start = $0000, size = $0004;
|
||||
SYSCHKCHNK: file = %O, start = $2E00, size = $0300;
|
||||
SYSCHKTRL: file = %O, start = $0000, size = $0006;
|
||||
|
||||
# "shadow RAM preparation" load chunk
|
||||
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
|
||||
SRPREPTRL: file = %O, start = $0000, size = $0006;
|
||||
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
|
||||
SRPREPTRL: file = %O, start = $0000, size = $0006;
|
||||
|
||||
# "main program" load chunk
|
||||
MAINHDR: file = %O, start = $0000, size = $0004;
|
||||
MAIN: file = %O, define = yes, start = %S + __LOWBSS_SIZE__, size = $D000 - __STACKSIZE__ - %S - __LOWBSS_SIZE__;
|
||||
MAINHDR: file = %O, start = $0000, size = $0004;
|
||||
MAIN: file = %O, define = yes, start = %S + __LOWBSS_SIZE__, size = $D000 - __STACKSIZE__ - %S - __LOWBSS_SIZE__;
|
||||
|
||||
# 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
|
||||
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)
|
||||
CHARGEN: file = "", define = yes, start = $E000, size = $0400;
|
||||
CHARGEN: file = "", define = yes, start = $E000, size = __CHARGENSIZE__;
|
||||
|
||||
# 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 {
|
||||
ZEROPAGE: load = ZP, type = zp;
|
||||
|
@ -51,7 +52,7 @@ SEGMENTS {
|
|||
SYSCHKTRL: load = SYSCHKTRL, type = ro, optional = yes;
|
||||
|
||||
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;
|
||||
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;
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -14,7 +14,7 @@ MEMORY {
|
|||
ZP: file = "", define = yes, start = $0002, 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 = __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__;
|
||||
OVL1ADDR: file = "%O.1", start = __OVERLAYSTART__ - 2, size = $0002;
|
||||
OVL1: file = "%O.1", start = __OVERLAYSTART__, size = __OVERLAYSIZE__;
|
||||
|
|
|
@ -1,25 +1,32 @@
|
|||
# Assembly configuration for R38
|
||||
|
||||
FEATURES {
|
||||
STARTADDRESS: default = $0801;
|
||||
}
|
||||
SYMBOLS {
|
||||
__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;
|
||||
}
|
||||
MEMORY {
|
||||
ZP: file = "", start = $0022, size = $0080 - $0022, define = yes;
|
||||
ZP2: file = "", start = $00A9, size = $0100 - $00A9;
|
||||
LOADADDR: file = %O, start = %S - 2, size = $0002;
|
||||
MAIN: file = %O, start = %S, size = __HIMEM__ - %S;
|
||||
}
|
||||
SEGMENTS {
|
||||
ZEROPAGE: load = ZP, type = zp;
|
||||
EXTZP: load = ZP, type = zp, optional = yes;
|
||||
EXTZP: load = ZP2, type = zp, optional = yes; # OK if BASIC functions not used
|
||||
LOADADDR: load = LOADADDR, type = ro;
|
||||
EXEHDR: load = MAIN, type = ro, optional = yes;
|
||||
LOWCODE: load = MAIN, type = ro, optional = yes;
|
||||
CODE: load = MAIN, type = ro;
|
||||
LOWCODE: load = MAIN, type = ro, optional = yes;
|
||||
ONCE: load = MAIN, type = ro, optional = yes;
|
||||
RODATA: load = MAIN, type = ro;
|
||||
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 {
|
||||
CONDES: type = constructor,
|
||||
|
|
|
@ -16,84 +16,80 @@ MEMORY {
|
|||
HEADER: file = %O, define = yes, start = %S, size = $000D;
|
||||
MAIN: file = %O, define = yes, start = __HEADER_LAST__, size = __HIMEM__ - __HEADER_LAST__;
|
||||
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;
|
||||
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;
|
||||
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;
|
||||
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;
|
||||
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;
|
||||
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;
|
||||
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;
|
||||
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;
|
||||
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;
|
||||
BRAM09: file = "%O.09", start = __BANKRAMSTART__, size = __BANKRAMSIZE__;
|
||||
BRAM0AADDR: file = "%O.0a", start = __BANKRAMSTART__ - 2, size = $0002;
|
||||
BRAM0A: file = "%O.0a", start = __BANKRAMSTART__, size = __BANKRAMSIZE__;
|
||||
BRAM0BADDR: file = "%O.0b", start = __BANKRAMSTART__ - 2, size = $0002;
|
||||
BRAM0B: file = "%O.0b", start = __BANKRAMSTART__, size = __BANKRAMSIZE__;
|
||||
BRAM0CADDR: file = "%O.0c", start = __BANKRAMSTART__ - 2, size = $0002;
|
||||
BRAM0C: file = "%O.0c", start = __BANKRAMSTART__, size = __BANKRAMSIZE__;
|
||||
BRAM0DADDR: file = "%O.0d", start = __BANKRAMSTART__ - 2, size = $0002;
|
||||
BRAM0D: file = "%O.0d", start = __BANKRAMSTART__, size = __BANKRAMSIZE__;
|
||||
BRAM0EADDR: file = "%O.0e", start = __BANKRAMSTART__ - 2, size = $0002;
|
||||
BRAM0E: file = "%O.0e", start = __BANKRAMSTART__, size = __BANKRAMSIZE__;
|
||||
BRAM0FADDR: file = "%O.0f", start = __BANKRAMSTART__ - 2, size = $0002;
|
||||
BRAM0F: file = "%O.0f", start = __BANKRAMSTART__, size = __BANKRAMSIZE__;
|
||||
BRAM09: file = "%O.09", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $09;
|
||||
BRAM0AADDR: file = "%O.0A", start = __BANKRAMSTART__ - 2, size = $0002;
|
||||
BRAM0A: file = "%O.0A", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $0A;
|
||||
BRAM0BADDR: file = "%O.0B", start = __BANKRAMSTART__ - 2, size = $0002;
|
||||
BRAM0B: file = "%O.0B", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $0B;
|
||||
BRAM0CADDR: file = "%O.0C", start = __BANKRAMSTART__ - 2, size = $0002;
|
||||
BRAM0C: file = "%O.0C", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $0C;
|
||||
BRAM0DADDR: file = "%O.0D", start = __BANKRAMSTART__ - 2, size = $0002;
|
||||
BRAM0D: file = "%O.0D", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $0D;
|
||||
BRAM0EADDR: file = "%O.0E", start = __BANKRAMSTART__ - 2, size = $0002;
|
||||
BRAM0E: file = "%O.0E", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $0E;
|
||||
BRAM0FADDR: file = "%O.0F", start = __BANKRAMSTART__ - 2, size = $0002;
|
||||
BRAM0F: file = "%O.0F", start = __BANKRAMSTART__, size = __BANKRAMSIZE__, bank = $0F;
|
||||
}
|
||||
SEGMENTS {
|
||||
ZEROPAGE: load = ZP, type = zp;
|
||||
EXTZP: load = ZP, type = zp, optional = yes;
|
||||
EXTZP: load = ZP, type = zp, optional = yes;
|
||||
LOADADDR: load = LOADADDR, type = ro;
|
||||
EXEHDR: load = HEADER, type = ro;
|
||||
STARTUP: load = MAIN, type = ro;
|
||||
LOWCODE: load = MAIN, type = ro, optional = yes;
|
||||
STARTUP: load = MAIN, type = ro, optional = yes;
|
||||
LOWCODE: load = MAIN, type = ro, optional = yes;
|
||||
CODE: load = MAIN, type = ro;
|
||||
RODATA: load = MAIN, type = ro;
|
||||
DATA: load = MAIN, type = rw;
|
||||
INIT: load = MAIN, type = rw;
|
||||
ONCE: load = MAIN, type = ro, define = yes;
|
||||
BSS: load = BSS, type = bss, define = yes;
|
||||
# BRAM00ADDR: load = BRAM00ADDR, type = ro, optional = yes;
|
||||
# BANKRAM00: load = BRAM00, type = rw, define = yes, optional = yes;
|
||||
BRAM01ADDR: load = BRAM01ADDR, type = ro, optional = yes;
|
||||
BANKRAM01: load = BRAM01, type = rw, define = yes, optional = yes;
|
||||
BRAM02ADDR: load = BRAM02ADDR, type = ro, optional = yes;
|
||||
BANKRAM02: load = BRAM02, type = rw, define = yes, optional = yes;
|
||||
BRAM03ADDR: load = BRAM03ADDR, type = ro, optional = yes;
|
||||
BANKRAM03: load = BRAM03, type = rw, define = yes, optional = yes;
|
||||
BRAM04ADDR: load = BRAM04ADDR, type = ro, optional = yes;
|
||||
BANKRAM04: load = BRAM04, type = rw, define = yes, optional = yes;
|
||||
BRAM05ADDR: load = BRAM05ADDR, type = ro, optional = yes;
|
||||
BANKRAM05: load = BRAM05, type = rw, define = yes, optional = yes;
|
||||
BRAM06ADDR: load = BRAM06ADDR, type = ro, optional = yes;
|
||||
BANKRAM06: load = BRAM06, type = rw, define = yes, optional = yes;
|
||||
BRAM07ADDR: load = BRAM07ADDR, type = ro, optional = yes;
|
||||
BANKRAM07: load = BRAM07, type = rw, define = yes, optional = yes;
|
||||
BRAM08ADDR: load = BRAM08ADDR, type = ro, optional = yes;
|
||||
BANKRAM08: load = BRAM08, type = rw, define = yes, optional = yes;
|
||||
BRAM09ADDR: load = BRAM09ADDR, type = ro, optional = yes;
|
||||
BANKRAM09: load = BRAM09, type = rw, define = yes, optional = yes;
|
||||
BRAM0AADDR: load = BRAM0AADDR, type = ro, optional = yes;
|
||||
BANKRAM0A: load = BRAM0A, type = rw, define = yes, optional = yes;
|
||||
BRAM0BADDR: load = BRAM0BADDR, type = ro, optional = yes;
|
||||
BANKRAM0B: load = BRAM0B, type = rw, define = yes, optional = yes;
|
||||
BRAM0CADDR: load = BRAM0CADDR, type = ro, optional = yes;
|
||||
BANKRAM0C: load = BRAM0C, type = rw, define = yes, optional = yes;
|
||||
BRAM0DADDR: load = BRAM0DADDR, type = ro, optional = yes;
|
||||
BANKRAM0D: load = BRAM0D, type = rw, define = yes, optional = yes;
|
||||
BRAM0EADDR: load = BRAM0EADDR, type = ro, optional = yes;
|
||||
BANKRAM0E: load = BRAM0E, type = rw, define = yes, optional = yes;
|
||||
BRAM0FADDR: load = BRAM0FADDR, type = ro, optional = yes;
|
||||
BANKRAM0F: load = BRAM0F, type = rw, define = yes, optional = yes;
|
||||
INIT: load = MAIN, type = rw, optional = yes;
|
||||
ONCE: load = MAIN, type = ro, define = yes;
|
||||
BSS: load = BSS, type = bss, define = yes;
|
||||
BRAM01ADDR: load = BRAM01ADDR, type = ro, optional = yes;
|
||||
BANKRAM01: load = BRAM01, type = rw, optional = yes, define = yes;
|
||||
BRAM02ADDR: load = BRAM02ADDR, type = ro, optional = yes;
|
||||
BANKRAM02: load = BRAM02, type = rw, optional = yes, define = yes;
|
||||
BRAM03ADDR: load = BRAM03ADDR, type = ro, optional = yes;
|
||||
BANKRAM03: load = BRAM03, type = rw, optional = yes, define = yes;
|
||||
BRAM04ADDR: load = BRAM04ADDR, type = ro, optional = yes;
|
||||
BANKRAM04: load = BRAM04, type = rw, optional = yes, define = yes;
|
||||
BRAM05ADDR: load = BRAM05ADDR, type = ro, optional = yes;
|
||||
BANKRAM05: load = BRAM05, type = rw, optional = yes, define = yes;
|
||||
BRAM06ADDR: load = BRAM06ADDR, type = ro, optional = yes;
|
||||
BANKRAM06: load = BRAM06, type = rw, optional = yes, define = yes;
|
||||
BRAM07ADDR: load = BRAM07ADDR, type = ro, optional = yes;
|
||||
BANKRAM07: load = BRAM07, type = rw, optional = yes, define = yes;
|
||||
BRAM08ADDR: load = BRAM08ADDR, type = ro, optional = yes;
|
||||
BANKRAM08: load = BRAM08, type = rw, optional = yes, define = yes;
|
||||
BRAM09ADDR: load = BRAM09ADDR, type = ro, optional = yes;
|
||||
BANKRAM09: load = BRAM09, type = rw, optional = yes, define = yes;
|
||||
BRAM0AADDR: load = BRAM0AADDR, type = ro, optional = yes;
|
||||
BANKRAM0A: load = BRAM0A, type = rw, optional = yes, define = yes;
|
||||
BRAM0BADDR: load = BRAM0BADDR, type = ro, optional = yes;
|
||||
BANKRAM0B: load = BRAM0B, type = rw, optional = yes, define = yes;
|
||||
BRAM0CADDR: load = BRAM0CADDR, type = ro, optional = yes;
|
||||
BANKRAM0C: load = BRAM0C, type = rw, optional = yes, define = yes;
|
||||
BRAM0DADDR: load = BRAM0DADDR, type = ro, optional = yes;
|
||||
BANKRAM0D: load = BRAM0D, type = rw, optional = yes, define = yes;
|
||||
BRAM0EADDR: load = BRAM0EADDR, type = ro, optional = yes;
|
||||
BANKRAM0E: load = BRAM0E, type = rw, optional = yes, define = yes;
|
||||
BRAM0FADDR: load = BRAM0FADDR, type = ro, optional = yes;
|
||||
BANKRAM0F: load = BRAM0F, type = rw, optional = yes, define = yes;
|
||||
}
|
||||
FEATURES {
|
||||
CONDES: type = constructor,
|
||||
|
|
12
cfg/cx16.cfg
12
cfg/cx16.cfg
|
@ -16,17 +16,17 @@ MEMORY {
|
|||
}
|
||||
SEGMENTS {
|
||||
ZEROPAGE: load = ZP, type = zp;
|
||||
EXTZP: load = ZP, type = zp, optional = yes;
|
||||
EXTZP: load = ZP, type = zp, optional = yes;
|
||||
LOADADDR: load = LOADADDR, type = ro;
|
||||
EXEHDR: load = HEADER, type = ro;
|
||||
STARTUP: load = MAIN, type = ro;
|
||||
LOWCODE: load = MAIN, type = ro, optional = yes;
|
||||
STARTUP: load = MAIN, type = ro, optional = yes;
|
||||
LOWCODE: load = MAIN, type = ro, optional = yes;
|
||||
CODE: load = MAIN, type = ro;
|
||||
RODATA: load = MAIN, type = ro;
|
||||
DATA: load = MAIN, type = rw;
|
||||
INIT: load = MAIN, type = rw;
|
||||
ONCE: load = MAIN, type = ro, define = yes;
|
||||
BSS: load = BSS, type = bss, define = yes;
|
||||
INIT: load = MAIN, type = rw, optional = yes;
|
||||
ONCE: load = MAIN, type = ro, define = yes;
|
||||
BSS: load = BSS, type = bss, define = yes;
|
||||
}
|
||||
FEATURES {
|
||||
CONDES: type = constructor,
|
||||
|
|
|
@ -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__;
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
# supervision 1284kbyte cartridge with bankswitching
|
||||
# supervision 128kbyte cartridge with bankswitching
|
||||
# for assembler
|
||||
|
||||
# ld65 config file
|
||||
|
@ -30,8 +30,23 @@ SEGMENTS {
|
|||
BANK5: load = BANKROM5, type = ro;
|
||||
BANK6: load = BANKROM6, type = ro;
|
||||
BANK7: load = BANKROM7, type = ro;
|
||||
ZEROPAGE: load = RAM, type = bss, define = yes;
|
||||
DATA: load = RAM, type = bss, define = yes, offset = $0200;
|
||||
ZEROPAGE: load = RAM, type = zp, define = yes;
|
||||
DATA: load = RAM, type = rw, define = yes, offset = $0200;
|
||||
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;
|
||||
RODATA: load = ROM, type = ro, define = yes;
|
||||
DATA: load = ROM, run = RAM, type = rw, define = yes;
|
||||
FFF0: load = ROM, type = ro, offset = $3FF0;
|
||||
VECTOR: load = ROM, type = ro, offset = $3FFA;
|
||||
FFF0: load = ROM, type = ro, start = $FFF0;
|
||||
VECTORS: load = ROM, type = ro, start = $FFFA;
|
||||
BSS: load = RAM, type = bss, define = yes;
|
||||
}
|
||||
FEATURES {
|
||||
|
|
|
@ -23,8 +23,23 @@ SEGMENTS {
|
|||
BANK1: load = BANKROM1, type = ro;
|
||||
BANK2: load = BANKROM2, type = ro;
|
||||
BANK3: load = BANKROM3, type = ro;
|
||||
ZEROPAGE: load = RAM, type = bss, define = yes;
|
||||
DATA: load = RAM, type = bss, define = yes, offset = $0200;
|
||||
ZEROPAGE: load = RAM, type = zp, define = yes;
|
||||
DATA: load = RAM, type = rw, define = yes, offset = $0200;
|
||||
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;
|
||||
RODATA: load = ROM, type = ro, define = yes;
|
||||
DATA: load = ROM, run = RAM, type = rw, define = yes;
|
||||
FFF0: load = ROM, type = ro, offset = $7FF0;
|
||||
VECTOR: load = ROM, type = ro, offset = $7FFA;
|
||||
FFF0: load = ROM, type = ro, start = $FFF0;
|
||||
VECTORS: load = ROM, type = ro, start = $FFFA;
|
||||
BSS: load = RAM, type = bss, define = yes;
|
||||
}
|
||||
FEATURES {
|
||||
|
|
|
@ -0,0 +1,46 @@
|
|||
# sym1-32k.cfg (32k)
|
||||
#
|
||||
# for Sym-1 with 32kb RAM
|
||||
#
|
||||
# ld65 --config sym1-32k.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 = $0200; # 512 byte program stack
|
||||
__STARTADDRESS__: type = export, value = %S;
|
||||
}
|
||||
|
||||
MEMORY {
|
||||
ZP: file = %O, define = yes, start = $0000, size = $00F7;
|
||||
CPUSTACK: file = "", define = yes, start = $0100, size = $0100;
|
||||
RAM: file = %O, define = yes, start = %S, size = $8000 - %S - __STACKSIZE__;
|
||||
MONROM: file = "", define = yes, start = $8000, size = $1000;
|
||||
EXT: file = "", define = yes, start = $9000, size = $1000;
|
||||
IO: file = "", define = yes, start = $A000, size = $1000;
|
||||
RAE1: file = "", define = yes, start = $B000, size = $1000;
|
||||
BASROM: file = "", define = yes, start = $C000, size = $1000;
|
||||
RAE2: 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;
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
# sym1-4k.cfg (4k)
|
||||
#
|
||||
# for Sym-1 with 4kb RAM
|
||||
#
|
||||
# ld65 --config sym1-4k.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 = $00F7;
|
||||
CPUSTACK: file = "", define = yes, start = $0100, size = $0100;
|
||||
RAM: file = %O, define = yes, start = %S, size = $1000 - %S - __STACKSIZE__;
|
||||
MONROM: file = "", define = yes, start = $8000, size = $1000;
|
||||
EXT: file = "", define = yes, start = $9000, size = $1000;
|
||||
IO: file = "", define = yes, start = $A000, size = $1000;
|
||||
RAE1: file = "", define = yes, start = $B000, size = $1000;
|
||||
BASROM: file = "", define = yes, start = $C000, size = $1000;
|
||||
RAE2: 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;
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
# sym1-4k.cfg (4k)
|
||||
#
|
||||
# for Sym-1 with 4kb RAM
|
||||
#
|
||||
# ld65 --config sym1-4k.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 = $00F7;
|
||||
CPUSTACK: file = "", define = yes, start = $0100, size = $0100;
|
||||
RAM: file = %O, define = yes, start = %S, size = $1000 - %S - __STACKSIZE__;
|
||||
MONROM: file = "", define = yes, start = $8000, size = $1000;
|
||||
EXT: file = "", define = yes, start = $9000, size = $1000;
|
||||
IO: file = "", define = yes, start = $A000, size = $1000;
|
||||
RAE1: file = "", define = yes, start = $B000, size = $1000;
|
||||
BASROM: file = "", define = yes, start = $C000, size = $1000;
|
||||
RAE2: 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;
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
FEATURES {
|
||||
STARTADDRESS: default = $1001;
|
||||
}
|
||||
SYMBOLS {
|
||||
__LOADADDR__: type = import;
|
||||
}
|
||||
MEMORY {
|
||||
ZP: file = "", start = $0002, size = $001A, define = yes;
|
||||
LOADADDR: file = %O, start = $1001, size = $0002;
|
||||
MAIN: file = %O, start = %S, size = $0DF3 - %S;
|
||||
}
|
||||
SEGMENTS {
|
||||
ZEROPAGE: load = ZP, type = zp, optional = yes;
|
||||
LOADADDR: load = LOADADDR, type = ro;
|
||||
CODE: load = MAIN, type = ro;
|
||||
RODATA: load = MAIN, type = ro;
|
||||
DATA: load = MAIN, type = rw;
|
||||
BSS: load = MAIN, type = bss, optional = yes, define = yes;
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
# Memory configuration which supports the "vic20-hi.tgi" driver.
|
||||
# Memory configuration for a VIC-20 with, at least, 8K expansion RAM.
|
||||
FEATURES {
|
||||
STARTADDRESS: default = $1201;
|
||||
}
|
||||
SYMBOLS {
|
||||
__LOADADDR__: type = import;
|
||||
__EXEHDR__: type = import;
|
||||
__TGIHDR__: type = import;
|
||||
__STACKSIZE__: type = weak, value = $0200; # 512-byte stack
|
||||
__HIMEM__: type = weak, value = $4000;
|
||||
}
|
||||
MEMORY {
|
||||
ZP: file = "", define = yes, start = $0002, size = $001A;
|
||||
LOADADDR: file = %O, start = %S - 2, size = $0002;
|
||||
HEADER: file = %O, define = yes, start = %S, size = $003E;
|
||||
MAIN: file = %O, define = yes, start = $2000, size = __HIMEM__ - __MAIN_START__ - __STACKSIZE__;
|
||||
}
|
||||
SEGMENTS {
|
||||
ZEROPAGE: load = ZP, type = zp;
|
||||
LOADADDR: load = LOADADDR, type = ro;
|
||||
# The start-up code needs EXEHDR, TGI1HDR, TGI2HDR,
|
||||
# and STARTUP to be next to each other, in that order.
|
||||
EXEHDR: load = HEADER, type = ro;
|
||||
TGI1HDR: load = HEADER, type = ro;
|
||||
TGI2HDR: load = MAIN, type = ro;
|
||||
STARTUP: load = MAIN, type = ro;
|
||||
LOWCODE: load = MAIN, type = ro, optional = yes;
|
||||
CODE: load = MAIN, type = ro;
|
||||
RODATA: load = MAIN, type = ro;
|
||||
DATA: load = MAIN, type = rw;
|
||||
ONCE: load = MAIN, type = ro, optional = yes, define = yes;
|
||||
INIT: load = MAIN, type = bss, optional = yes;
|
||||
BSS: load = MAIN, 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,7 +1,7 @@
|
|||
SYMBOLS {
|
||||
__LOADADDR__: type = import;
|
||||
__EXEHDR__: type = import;
|
||||
__STACKSIZE__: type = weak, value = $0400; # 1k stack
|
||||
__STACKSIZE__: type = weak, value = $0100;
|
||||
}
|
||||
MEMORY {
|
||||
ZP: file = "", define = yes, start = $0002, size = $001A;
|
||||
|
|
|
@ -428,8 +428,8 @@ The names in the parentheses denote the symbols to be used for static linking of
|
|||
|
||||
<tag><tt/a2.ssc.ser (a2_ssc_ser)/</tag>
|
||||
Driver for the Apple II Super Serial Card. Supports up to 19200 baud,
|
||||
hardware flow control (RTS/CTS) and interrupt driven receives. Note
|
||||
that because of the peculiarities of the 6551 chip transmits are not
|
||||
requires hardware flow control (RTS/CTS) and does interrupt driven receives.
|
||||
Note that because of the peculiarities of the 6551 chip transmits are not
|
||||
interrupt driven, and the transceiver blocks if the receiver asserts
|
||||
flow control because of a full buffer.
|
||||
|
||||
|
@ -575,15 +575,13 @@ url="ca65.html" name="assembler manual">.
|
|||
|
||||
<tag>Explanation of File Types</tag>
|
||||
|
||||
ProDOS associates a file type and an auxiliary type with each file.
|
||||
ProDOS 8 associates a file type and an auxiliary type with each file.
|
||||
These type specifications are separate from the file's name, unlike
|
||||
Windows which uses the file name's suffix (a.k.a.
|
||||
extension) to specify the file type. For example, <tt/.exe/,
|
||||
<tt/.doc/, or <tt/.bat/.
|
||||
The ProDOS low-level
|
||||
Machine-Language Interface (MLI) functions for creating and opening
|
||||
files require these types to be specified. And if they don't match
|
||||
with the file being opened, the operation may fail.
|
||||
The ProDOS 8 Machine-Language Interface (MLI) function for creating a
|
||||
file require these types to be specified.
|
||||
|
||||
In contrast, the ISO C function <tt/fopen()/ and the POSIX function
|
||||
<tt/open()/ have no parameter to specify either a file type or an
|
||||
|
@ -606,8 +604,6 @@ url="ca65.html" name="assembler manual">.
|
|||
The header file <tt/apple2_filetype.h/ also defines many values
|
||||
that can be used to set these variables. It is included in
|
||||
<tt/apple2.h/, which is in turn included in <tt/apple2enh.h/.
|
||||
So it isn't necessary to include it directly. Just
|
||||
include one of <tt/apple2.h/ or <tt/apple2enh.h/.
|
||||
|
||||
<tag>Example</tag>
|
||||
|
||||
|
@ -624,8 +620,8 @@ url="ca65.html" name="assembler manual">.
|
|||
carriage return instead of a line-feed (Linux/BSD/MacOS) or
|
||||
carriage return, line-feed pair (Windows).
|
||||
|
||||
The "sequential" text file terminology is in contrast to a
|
||||
"random-access" text file which would
|
||||
The 'sequential' text file terminology is in contrast to a
|
||||
'random-access' text file which would
|
||||
have a fixed-length, non-zero record length, so that the
|
||||
file position of any individual record can be calculated.
|
||||
|
||||
|
|
|
@ -428,8 +428,8 @@ The names in the parentheses denote the symbols to be used for static linking of
|
|||
|
||||
<tag><tt/a2e.ssc.ser (a2e_ssc_ser)/</tag>
|
||||
Driver for the Apple II Super Serial Card. Supports up to 19200 baud,
|
||||
hardware flow control (RTS/CTS) and interrupt driven receives. Note
|
||||
that because of the peculiarities of the 6551 chip transmits are not
|
||||
requires hardware flow control (RTS/CTS) and does interrupt driven receives.
|
||||
Note that because of the peculiarities of the 6551 chip transmits are not
|
||||
interrupt driven, and the transceiver blocks if the receiver asserts
|
||||
flow control because of a full buffer.
|
||||
|
||||
|
@ -580,15 +580,13 @@ url="ca65.html" name="assembler manual">.
|
|||
|
||||
<tag>Explanation of File Types</tag>
|
||||
|
||||
ProDOS associates a file type and an auxiliary type with each file.
|
||||
ProDOS 8 associates a file type and an auxiliary type with each file.
|
||||
These type specifications are separate from the file's name, unlike
|
||||
Windows which uses the file name's suffix (a.k.a.
|
||||
extension) to specify the file type. For example, <tt/.exe/,
|
||||
<tt/.doc/, or <tt/.bat/.
|
||||
The ProDOS low-level
|
||||
Machine-Language Interface (MLI) functions for creating and opening
|
||||
files require these types to be specified. And if they don't match
|
||||
with the file being opened, the operation may fail.
|
||||
The ProDOS 8 Machine-Language Interface (MLI) function for creating a
|
||||
file require these types to be specified.
|
||||
|
||||
In contrast, the ISO C function <tt/fopen()/ and the POSIX function
|
||||
<tt/open()/ have no parameter to specify either a file type or an
|
||||
|
@ -611,8 +609,6 @@ url="ca65.html" name="assembler manual">.
|
|||
The header file <tt/apple2_filetype.h/ also defines many values
|
||||
that can be used to set these variables. It is included in
|
||||
<tt/apple2.h/, which is in turn included in <tt/apple2enh.h/.
|
||||
So it isn't necessary to include it directly. Just
|
||||
include one of <tt/apple2.h/ or <tt/apple2enh.h/.
|
||||
|
||||
<tag>Example</tag>
|
||||
|
||||
|
@ -629,8 +625,8 @@ url="ca65.html" name="assembler manual">.
|
|||
carriage return instead of a line-feed (Linux/BSD/MacOS) or
|
||||
carriage return, line-feed pair (Windows).
|
||||
|
||||
The "sequential" text file terminology is in contrast to a
|
||||
"random-access" text file which would
|
||||
The 'sequential' text file terminology is in contrast to a
|
||||
'random-access' text file which would
|
||||
have a fixed-length, non-zero record length, so that the
|
||||
file position of any individual record can be calculated.
|
||||
|
||||
|
|
|
@ -332,6 +332,7 @@ See the <url url="funcref.html" name="function reference"> for declaration and u
|
|||
<item>_scroll
|
||||
<item>_setcolor
|
||||
<item>_setcolor_low
|
||||
<item>waitvsync
|
||||
</itemize>
|
||||
|
||||
|
||||
|
@ -674,9 +675,9 @@ The default callbacks definition (<tt/mouse_def_callbacks/) is an alias for the
|
|||
|
||||
<sect1>RS232 device drivers<p>
|
||||
|
||||
Currently there is one RS232 driver. It uses the R: device (therefore
|
||||
an R: driver needs to be installed) and was tested with the 850
|
||||
interface module.
|
||||
Currently there is one RS232 driver. It supports up to 9600 baud, requires hardware flow control
|
||||
(RTS/CTS) and uses the R: device (therefore an R: driver needs to be installed). It was tested
|
||||
with the 850 interface module.
|
||||
|
||||
<table>
|
||||
<tabular ca="rr">
|
||||
|
@ -1169,7 +1170,7 @@ When using cl65, you can leave it out with this command line:
|
|||
cl65 -Wl -D__SYSTEM_CHECK__=1 <arguments>
|
||||
</verb></tscreen>
|
||||
|
||||
The value you assign to <tt/__SYSTEM_CHECK_/ doesn't matter. If the
|
||||
The value you assign to <tt/__SYSTEM_CHECK__/ doesn't matter. If the
|
||||
<tt/__SYSTEM_CHECK__/ symbol is defined, the load chunk won't be included.
|
||||
|
||||
|
||||
|
|
|
@ -30,7 +30,7 @@ information.
|
|||
|
||||
<sect>Binary format<p>
|
||||
|
||||
The standard binary output format generated by the linker for the Atari 5200 target
|
||||
The binary output format generated by the linker for the Atari 5200 target
|
||||
is a cartridge image. It is of course
|
||||
possible to change this behaviour by using a modified startup file and linker
|
||||
config.
|
||||
|
@ -73,11 +73,22 @@ Special locations:
|
|||
|
||||
Programs containing Atari 5200 specific code may use the <tt/atari5200.h/ header file.
|
||||
|
||||
This also includes access to operating system locations (e.g. hardware shadow registers) by a structure called
|
||||
"<tt/OS/".
|
||||
The names are the usual ones you can find in system reference manuals. Example:
|
||||
|
||||
<tscreen><verb>
|
||||
...
|
||||
OS.sdmctl = 0x00; // screen off
|
||||
OS.color4 = 14; // white frame
|
||||
tics = OS.rtclok[1] // get ticks
|
||||
...
|
||||
</verb></tscreen>
|
||||
|
||||
<sect1>Atari 5200 specific functions<p>
|
||||
|
||||
<itemize>
|
||||
<item>TBD.
|
||||
<item>waitvsync
|
||||
</itemize>
|
||||
|
||||
|
||||
|
@ -208,10 +219,58 @@ you cannot use any of the following functions (and a few others):
|
|||
|
||||
<sect>Other hints<p>
|
||||
|
||||
<sect1>CAR format<p>
|
||||
|
||||
AtariROMMaker (<url url="https://www.wudsn.com/index.php/productions-atari800/tools/atarirommaker"> )
|
||||
can be used to create a <tt/.CAR/ file from the binary ROM image cc65 generates.
|
||||
This might be more convenient when working with emulators.
|
||||
|
||||
<sect1>Changing the splash screen<p>
|
||||
|
||||
The 5200 ROM displays a splash screen at startup with the name of the
|
||||
game and the copyright year. The year information has a 'Year-2000'
|
||||
problem, the first two digits are fixed in the ROM and are always "19".
|
||||
|
||||
<sect2>Changing the game name<p>
|
||||
|
||||
The runtime library provides a default game name which is "cc65
|
||||
compiled". To change that, one has to link a file which puts data into
|
||||
the "<tt/CARTNAME/" segment.
|
||||
|
||||
For reference, here's the default version used by the cc65 libary:
|
||||
<tscreen><verb>
|
||||
.export __CART_NAME__: absolute = 1
|
||||
.macpack atari
|
||||
.segment "CARTNAME"
|
||||
scrcode " cc"
|
||||
.byte '6' + 32, '5' + 32 ; use playfield 1
|
||||
scrcode " compiled"
|
||||
</verb></tscreen>
|
||||
|
||||
'<tt/__CART_NAME__/' needs to be defined in order that the linker is
|
||||
satisfied and doesn't try to include the version of the runtime library.
|
||||
|
||||
20 bytes are available in the <tt/CARTNAME/ segment (one line) for the
|
||||
game/program name.
|
||||
|
||||
<sect2>Changing the copyright year / changing the cartridge type<p>
|
||||
|
||||
The century is hard-coded to 1900 by the ROM.
|
||||
|
||||
There are two digits which can be changed. For example "92" will give
|
||||
"1992" on the screen.
|
||||
|
||||
The default used by the runtime library is
|
||||
|
||||
<tscreen><verb>
|
||||
.export __CART_YEAR__: absolute = 1
|
||||
.segment "CARTYEAR"
|
||||
.byte '9' + 32,'8' + 32 ; "98", using playfield 1
|
||||
</verb></tscreen>
|
||||
|
||||
If the second byte of the year in the <tt/CARTYEAR/ segment is 255,
|
||||
the cartridge is seen as a 'diagnostic' cartridge, and the splash
|
||||
screen and most of the other startup initializations are bypassed.
|
||||
|
||||
<sect>License<p>
|
||||
|
||||
|
|
|
@ -176,10 +176,11 @@ No mouse drivers are currently available for the Atmos.
|
|||
|
||||
<tag><tt/atmos-acia.ser (atmos_acia_ser)/</tag>
|
||||
Driver for the Telestrat integrated serial controller and the Atmos with a
|
||||
serial add-on.
|
||||
Note that, because of the peculiarities of the 6551 chip, together with the
|
||||
use of the NMI, transmits are not interrupt driven; and, the transceiver
|
||||
blocks if the receiver asserts flow control because of a full buffer.
|
||||
serial add-on. Supports up to 19200 baud, requires hardware flow control
|
||||
(RTS/CTS) and does interrupt driven receives. Note that, because of the
|
||||
peculiarities of the 6551 chip, together with the use of the NMI, transmits
|
||||
are not interrupt driven; and, the transceiver blocks if the receiver
|
||||
asserts flow control because of a full buffer.
|
||||
|
||||
</descrip><p>
|
||||
|
||||
|
|
|
@ -324,9 +324,9 @@ The default drivers, <tt/mouse_stddrv (mouse_static_stddrv)/, point to <tt/c128-
|
|||
<descrip>
|
||||
|
||||
<tag><tt/c128-swlink.ser (c128_swlink_ser)/</tag>
|
||||
Driver for the SwiftLink cartridge. Supports up to 38400 BPS, hardware flow
|
||||
control (RTS/CTS), and interrupt-driven receives. Note that, because of the
|
||||
peculiarities of the 6551 chip, together with the use of the NMI, transmits
|
||||
Driver for the SwiftLink cartridge. Supports up to 38400 baud, requires hardware
|
||||
flow control (RTS/CTS) and does interrupt driven receives. Note that, because of
|
||||
the peculiarities of the 6551 chip, together with the use of the NMI, transmits
|
||||
are not interrupt driven; and, the transceiver blocks if the receiver asserts
|
||||
flow control because of a full buffer.
|
||||
|
||||
|
|
|
@ -410,9 +410,9 @@ The default drivers, <tt/mouse_stddrv (mouse_static_stddrv)/, point to <tt/c64-1
|
|||
<descrip>
|
||||
|
||||
<tag><tt/c64-swlink.ser (c64_swlink_ser)/</tag>
|
||||
Driver for the SwiftLink cartridge. Supports up to 38400 BPS, hardware flow
|
||||
control (RTS/CTS), and interrupt-driven receives. Note that, because of the
|
||||
peculiarities of the 6551 chip, together with the use of the NMI, transmits
|
||||
Driver for the SwiftLink cartridge. Supports up to 38400 baud, requires hardware
|
||||
flow control (RTS/CTS) and does interrupt driven receives. Note that, because of
|
||||
the peculiarities of the 6551 chip, together with the use of the NMI, transmits
|
||||
are not interrupt driven; and, the transceiver blocks if the receiver asserts
|
||||
flow control because of a full buffer.
|
||||
|
||||
|
|
328
doc/ca65.sgml
328
doc/ca65.sgml
|
@ -151,7 +151,7 @@ Here is a description of all the command line options:
|
|||
Set the default for the CPU type. The option takes a parameter, which
|
||||
may be one of
|
||||
|
||||
6502, 6502X, 65SC02, 65C02, 65816, sweet16, HuC6280, 4510
|
||||
6502, 6502X, 6502DTV, 65SC02, 65C02, 65816, sweet16, HuC6280, 4510
|
||||
|
||||
|
||||
<label id="option-create-dep">
|
||||
|
@ -419,6 +419,8 @@ The assembler accepts
|
|||
<tt><ref id=".P02" name=".P02"></tt> command was given).
|
||||
<item>all valid 6502 mnemonics plus a set of illegal instructions when in
|
||||
<ref id="6502X-mode" name="6502X mode">.
|
||||
<item>all valid 6502DTV mnemonics when in 6502DTV mode (after the
|
||||
<tt><ref id=".PDTV" name=".PDTV"></tt> command was given).
|
||||
<item>all valid 65SC02 mnemonics when in 65SC02 mode (after the
|
||||
<tt><ref id=".PSC02" name=".PSC02"></tt> command was given).
|
||||
<item>all valid 65C02 mnemonics when in 65C02 mode (after the
|
||||
|
@ -622,7 +624,7 @@ problem in most cases.
|
|||
<tabular ca="clc">
|
||||
<bf/Operator/| <bf/Description/| <bf/Precedence/@<hline>
|
||||
| Built-in string functions| 0@
|
||||
||~@
|
||||
~|~|~@
|
||||
| Built-in pseudo-variables| 1@
|
||||
| Built-in pseudo-functions| 1@
|
||||
+| Unary positive| 1@
|
||||
|
@ -635,7 +637,7 @@ problem in most cases.
|
|||
.HIBYTE| Unary high-byte operator| 1@
|
||||
^<newline>
|
||||
.BANKBYTE| Unary bank-byte operator| 1@
|
||||
||~@
|
||||
~|~|~@
|
||||
*| Multiplication| 2@
|
||||
/| Division| 2@
|
||||
.MOD| Modulo operator| 2@
|
||||
|
@ -647,28 +649,28 @@ problem in most cases.
|
|||
.SHL| Shift-left operator| 2@
|
||||
>><newline>
|
||||
.SHR| Shift-right operator| 2@
|
||||
||~@
|
||||
~|~|~@
|
||||
+| Binary addition| 3@
|
||||
-| Binary subtraction| 3@
|
||||
|<newline>
|
||||
.BITOR| Bitwise or| 3@
|
||||
||~@
|
||||
~|~|~@
|
||||
= | Compare operator (equal)| 4@
|
||||
<>| Compare operator (not equal)| 4@
|
||||
<| Compare operator (less)| 4@
|
||||
>| Compare operator (greater)| 4@
|
||||
<=| Compare operator (less or equal)| 4@
|
||||
>=| Compare operator (greater or equal)| 4@
|
||||
||~@
|
||||
~|~|~@
|
||||
&&<newline>
|
||||
.AND| Boolean and| 5@
|
||||
.XOR| Boolean xor| 5@
|
||||
||~@
|
||||
~|~|~@
|
||||
||<newline>
|
||||
.OR| Boolean or| 6@
|
||||
||~@
|
||||
~|~|~@
|
||||
!<newline>
|
||||
.NOT| Boolean not| 7@<hline>
|
||||
.NOT| Boolean not| 7
|
||||
</tabular>
|
||||
<caption>Available operators, sorted by precedence
|
||||
</table>
|
||||
|
@ -1356,15 +1358,15 @@ writable.
|
|||
|
||||
<sect>Pseudo functions<label id="pseudo-functions"><p>
|
||||
|
||||
Pseudo functions expect their arguments in parenthesis, and they have a result,
|
||||
either a string or an expression.
|
||||
Pseudo functions expect their arguments in parentheses, and they have a result,
|
||||
either a string or an expression value.
|
||||
|
||||
|
||||
<sect1><tt>.ADDRSIZE</tt><label id=".ADDRSIZE"><p>
|
||||
|
||||
The <tt/.ADDRSIZE/ function is used to return the interal address size
|
||||
The <tt/.ADDRSIZE/ function is used to return the internal address size
|
||||
associated with a symbol. This can be helpful in macros when knowing the address
|
||||
size of symbol can help with custom instructions.
|
||||
size of a symbol can help with custom instructions.
|
||||
|
||||
Example:
|
||||
|
||||
|
@ -1392,7 +1394,7 @@ either a string or an expression.
|
|||
<sect1><tt>.BANK</tt><label id=".BANK"><p>
|
||||
|
||||
The <tt/.BANK/ function is used to support systems with banked memory. The
|
||||
argument is an expression with exactly one segment reference - usually a
|
||||
argument is an expression with exactly one segment reference -- usually a
|
||||
label. The function result is the value of the <tt/bank/ attribute assigned
|
||||
to the run memory area of the segment. Please see the linker documentation
|
||||
for more information about memory areas and their attributes.
|
||||
|
@ -1400,13 +1402,13 @@ either a string or an expression.
|
|||
The value of <tt/.BANK/ can be used to switch memory so that a memory bank
|
||||
containing specific data is available.
|
||||
|
||||
The <tt/bank/ attribute is a 32 bit integer and so is the result of the
|
||||
The <tt/bank/ attribute is a 32-bit integer, and so is the result of the
|
||||
<tt/.BANK/ function. You will have to use <tt><ref id=".LOBYTE"
|
||||
name=".LOBYTE"></tt> or similar functions to address just part of it.
|
||||
|
||||
Please note that <tt/.BANK/ will always get evaluated in the link stage, so
|
||||
an expression containing <tt/.BANK/ can never be used where a constant known
|
||||
result is expected (for example with <tt/.RES/).
|
||||
Please note that <tt/.BANK/ always will get evaluated in the link stage, so
|
||||
an expression containing <tt/.BANK/ never can be used where a constant, known
|
||||
result is expected (for example, with <tt/.RES/).
|
||||
|
||||
Example:
|
||||
|
||||
|
@ -1443,7 +1445,7 @@ either a string or an expression.
|
|||
|
||||
<sect1><tt>.BLANK</tt><label id=".BLANK"><p>
|
||||
|
||||
Builtin function. The function evaluates its argument in braces and yields
|
||||
Builtin function. The function evaluates its argument in parentheses and yields
|
||||
"false" if the argument is non blank (there is an argument), and "true" if
|
||||
there is no argument. The token list that makes up the function argument
|
||||
may optionally be enclosed in curly braces. This allows the inclusion of
|
||||
|
@ -1482,7 +1484,7 @@ either a string or an expression.
|
|||
|
||||
<sect1><tt>.CONST</tt><label id=".CONST"><p>
|
||||
|
||||
Builtin function. The function evaluates its argument in braces and
|
||||
Builtin function. The function evaluates its argument in parentheses and
|
||||
yields "true" if the argument is a constant expression (that is, an
|
||||
expression that yields a constant value at assembly time) and "false"
|
||||
otherwise. As an example, the .IFCONST statement may be replaced by
|
||||
|
@ -1492,6 +1494,41 @@ either a string or an expression.
|
|||
</verb></tscreen>
|
||||
|
||||
|
||||
<sect1><tt>.DEF, .DEFINED</tt><label id=".DEFINED"><p>
|
||||
|
||||
Builtin function. The function expects an identifier as argument in parentheses.
|
||||
The argument is evaluated, and the function yields "true" if the identifier
|
||||
is a symbol that already is defined somewhere in the source file up to the
|
||||
current position. Otherwise, the function yields false. As an example, the
|
||||
<tt><ref id=".IFDEF" name=".IFDEF"></tt> statement may be replaced by
|
||||
|
||||
<tscreen><verb>
|
||||
.if .defined(a)
|
||||
</verb></tscreen>
|
||||
|
||||
|
||||
<sect1><tt>.DEFINEDMACRO</tt><label id=".DEFINEDMACRO"><p>
|
||||
|
||||
Builtin function. The function expects an identifier as argument in parentheses.
|
||||
The argument is evaluated, and the function yields "true" if the identifier
|
||||
already has been defined as the name of a macro. Otherwise, the function yields
|
||||
false. Example:
|
||||
|
||||
<tscreen><verb>
|
||||
.macro add foo
|
||||
clc
|
||||
adc foo
|
||||
.endmacro
|
||||
|
||||
.if .definedmacro(add)
|
||||
add #$01
|
||||
.else
|
||||
clc
|
||||
adc #$01
|
||||
.endif
|
||||
</verb></tscreen>
|
||||
|
||||
|
||||
<sect1><tt>.HIBYTE</tt><label id=".HIBYTE"><p>
|
||||
|
||||
The function returns the high byte (that is, bits 8-15) of its argument.
|
||||
|
@ -1528,6 +1565,23 @@ either a string or an expression.
|
|||
</verb></tscreen>
|
||||
|
||||
|
||||
<sect1><tt>.ISMNEM, .ISMNEMONIC</tt><label id=".ISMNEMONIC"><p>
|
||||
|
||||
Builtin function. The function expects an identifier as argument in parentheses.
|
||||
The argument is evaluated, and the function yields "true" if the identifier
|
||||
is defined as an instruction mnemonic that is recognized by the assembler.
|
||||
Example:
|
||||
|
||||
<tscreen><verb>
|
||||
.if .not .ismnemonic(ina)
|
||||
.macro ina
|
||||
clc
|
||||
adc #$01
|
||||
.endmacro
|
||||
.endif
|
||||
</verb></tscreen>
|
||||
|
||||
|
||||
<sect1><tt>.LEFT</tt><label id=".LEFT"><p>
|
||||
|
||||
Builtin function. Extracts the left part of a given token list.
|
||||
|
@ -1722,7 +1776,7 @@ either a string or an expression.
|
|||
|
||||
<sect1><tt>.REF, .REFERENCED</tt><label id=".REFERENCED"><p>
|
||||
|
||||
Builtin function. The function expects an identifier as argument in braces.
|
||||
Builtin function. The function expects an identifier as argument in parentheses.
|
||||
The argument is evaluated, and the function yields "true" if the identifier
|
||||
is a symbol that has already been referenced somewhere in the source file up
|
||||
to the current position. Otherwise the function yields false. As an example,
|
||||
|
@ -1829,24 +1883,6 @@ either a string or an expression.
|
|||
</descrip>
|
||||
|
||||
|
||||
<sect1><tt>.STRAT</tt><label id=".STRAT"><p>
|
||||
|
||||
Builtin function. The function accepts a string and an index as
|
||||
arguments and returns the value of the character at the given position
|
||||
as an integer value. The index is zero based.
|
||||
|
||||
Example:
|
||||
|
||||
<tscreen><verb>
|
||||
.macro M Arg
|
||||
; Check if the argument string starts with '#'
|
||||
.if (.strat (Arg, 0) = '#')
|
||||
...
|
||||
.endif
|
||||
.endmacro
|
||||
</verb></tscreen>
|
||||
|
||||
|
||||
<sect1><tt>.SPRINTF</tt><label id=".SPRINTF"><p>
|
||||
|
||||
Builtin function. It expects a format string as first argument. The number
|
||||
|
@ -1866,9 +1902,27 @@ either a string or an expression.
|
|||
</verb></tscreen>
|
||||
|
||||
|
||||
<sect1><tt>.STRAT</tt><label id=".STRAT"><p>
|
||||
|
||||
Builtin function. The function accepts a string and an index as
|
||||
arguments and returns the value of the character at the given position
|
||||
as an integer value. The index is zero based.
|
||||
|
||||
Example:
|
||||
|
||||
<tscreen><verb>
|
||||
.macro M Arg
|
||||
; Check if the argument string starts with '#'
|
||||
.if (.strat (Arg, 0) = '#')
|
||||
...
|
||||
.endif
|
||||
.endmacro
|
||||
</verb></tscreen>
|
||||
|
||||
|
||||
<sect1><tt>.STRING</tt><label id=".STRING"><p>
|
||||
|
||||
Builtin function. The function accepts an argument in braces and converts
|
||||
Builtin function. The function accepts an argument in parentheses and converts
|
||||
this argument into a string constant. The argument may be an identifier, or
|
||||
a constant numeric value.
|
||||
|
||||
|
@ -1887,7 +1941,7 @@ either a string or an expression.
|
|||
|
||||
<sect1><tt>.STRLEN</tt><label id=".STRLEN"><p>
|
||||
|
||||
Builtin function. The function accepts a string argument in braces and
|
||||
Builtin function. The function accepts a string argument in parentheses and
|
||||
evaluates to the length of the string.
|
||||
|
||||
Example:
|
||||
|
@ -1904,7 +1958,7 @@ either a string or an expression.
|
|||
|
||||
<sect1><tt>.TCOUNT</tt><label id=".TCOUNT"><p>
|
||||
|
||||
Builtin function. The function accepts a token list in braces. The function
|
||||
Builtin function. The function accepts a token list in parentheses. The function
|
||||
result is the number of tokens given as argument. The token list may
|
||||
optionally be enclosed into curly braces which are not considered part of
|
||||
the list and not counted. Enclosement in curly braces allows the inclusion
|
||||
|
@ -2087,7 +2141,11 @@ Here's a list of all control commands and a description, what they do:
|
|||
|
||||
This will put the string "Hello world" followed by a binary zero into
|
||||
the current segment. There may be more strings separated by commas, but
|
||||
the binary zero is only appended once (after the last one).
|
||||
the binary zero is only appended once (after the last one). Strings will
|
||||
be translated using the current character mapping definition.
|
||||
|
||||
See: <tt><ref id=".BYTE" name=".BYTE"></tt>,<tt><ref id=".CHARMAP" name=".CHARMAP"></tt>,
|
||||
<tt><ref id=".LITERAL" name=".LITERAL"></tt>
|
||||
|
||||
|
||||
<sect1><tt>.ASSERT</tt><label id=".ASSERT"><p>
|
||||
|
@ -2183,7 +2241,8 @@ Here's a list of all control commands and a description, what they do:
|
|||
<sect1><tt>.BYT, .BYTE</tt><label id=".BYTE"><p>
|
||||
|
||||
Define byte sized data. Must be followed by a sequence of (byte ranged)
|
||||
expressions or strings.
|
||||
expressions or strings. Strings will be translated using the current
|
||||
character mapping definition.
|
||||
|
||||
Example:
|
||||
|
||||
|
@ -2192,6 +2251,9 @@ Here's a list of all control commands and a description, what they do:
|
|||
.byt "world", $0D, $00
|
||||
</verb></tscreen>
|
||||
|
||||
See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".CHARMAP" name=".CHARMAP"></tt>
|
||||
<tt><ref id=".LITERAL" name=".LITERAL"></tt>
|
||||
|
||||
|
||||
<sect1><tt>.CASE</tt><label id=".CASE"><p>
|
||||
|
||||
|
@ -2210,8 +2272,10 @@ Here's a list of all control commands and a description, what they do:
|
|||
|
||||
<sect1><tt>.CHARMAP</tt><label id=".CHARMAP"><p>
|
||||
|
||||
Apply a custom mapping for characters. The command is followed by two
|
||||
numbers. The first one is the index of the source character (range 0..255);
|
||||
Apply a custom mapping for characters for the commands <tt><ref id=".ASCIIZ"
|
||||
name=".ASCIIZ"></tt> and <tt><ref id=".BYTE" name=".BYTE"></tt>. The command
|
||||
is followed by two numbers. The first one is the index of the source character
|
||||
(range 0..255);
|
||||
the second one is the mapping (range 0..255). The mapping applies to all
|
||||
character and string constants <em/when/ they generate output; and, overrides
|
||||
a mapping table specified with the <tt><ref id="option-t" name="-t"></tt>
|
||||
|
@ -2359,7 +2423,7 @@ Here's a list of all control commands and a description, what they do:
|
|||
|
||||
Start a define style macro definition. The command is followed by an
|
||||
identifier (the macro name) and optionally by a list of formal arguments
|
||||
in braces.
|
||||
in parentheses.
|
||||
|
||||
Please note that <tt/.DEFINE/ shares most disadvantages with its C
|
||||
counterpart, so the general advice is, <bf/NOT/ do use <tt/.DEFINE/ if you
|
||||
|
@ -2383,41 +2447,6 @@ Here's a list of all control commands and a description, what they do:
|
|||
See also section <ref id="macros" name="Macros">.
|
||||
|
||||
|
||||
<sect1><tt>.DEF, .DEFINED</tt><label id=".DEFINED"><p>
|
||||
|
||||
Builtin function. The function expects an identifier as argument in braces.
|
||||
The argument is evaluated, and the function yields "true" if the identifier
|
||||
is a symbol that is already defined somewhere in the source file up to the
|
||||
current position. Otherwise the function yields false. As an example, the
|
||||
<tt><ref id=".IFDEF" name=".IFDEF"></tt> statement may be replaced by
|
||||
|
||||
<tscreen><verb>
|
||||
.if .defined(a)
|
||||
</verb></tscreen>
|
||||
|
||||
|
||||
<sect1><tt>.DEFINEDMACRO</tt><label id=".DEFINEDMACRO"><p>
|
||||
|
||||
Builtin function. The function expects an identifier as argument in braces.
|
||||
The argument is evaluated, and the function yields "true" if the identifier
|
||||
has already been defined as the name of a macro. Otherwise the function yields
|
||||
false. Example:
|
||||
|
||||
<tscreen><verb>
|
||||
.macro add foo
|
||||
clc
|
||||
adc foo
|
||||
.endmacro
|
||||
|
||||
.if .definedmacro(add)
|
||||
add #$01
|
||||
.else
|
||||
clc
|
||||
adc #$01
|
||||
.endif
|
||||
</verb></tscreen>
|
||||
|
||||
|
||||
<sect1><tt>.DESTRUCTOR</tt><label id=".DESTRUCTOR"><p>
|
||||
|
||||
Export a symbol and mark it as a module destructor. This may be used
|
||||
|
@ -3158,6 +3187,12 @@ Here's a list of all control commands and a description, what they do:
|
|||
(see <tt><ref id=".PC02" name=".PC02"></tt> command).
|
||||
|
||||
|
||||
<sect1><tt>.IFPDTV</tt><label id=".IFPDTV"><p>
|
||||
|
||||
Conditional assembly: Check if the assembler is currently in 6502DTV mode
|
||||
(see <tt><ref id=".PDTV" name=".PDTV"></tt> command).
|
||||
|
||||
|
||||
<sect1><tt>.IFPSC02</tt><label id=".IFPSC02"><p>
|
||||
|
||||
Conditional assembly: Check if the assembler is currently in 65SC02 mode
|
||||
|
@ -3183,7 +3218,8 @@ Here's a list of all control commands and a description, what they do:
|
|||
.endif
|
||||
</verb></tscreen>
|
||||
|
||||
See also: <tt><ref id=".REFERENCED" name=".REFERENCED"></tt>
|
||||
See also: <tt><ref id=".REFERENCED" name=".REFERENCED"></tt>, and
|
||||
<tt><ref id=".REFERTO" name=".REFERTO"></tt>
|
||||
|
||||
|
||||
<sect1><tt>.IMPORT</tt><label id=".IMPORT"><p>
|
||||
|
@ -3281,23 +3317,6 @@ Here's a list of all control commands and a description, what they do:
|
|||
the feature in more detail.
|
||||
|
||||
|
||||
<sect1><tt>.ISMNEM, .ISMNEMONIC</tt><label id=".ISMNEMONIC"><p>
|
||||
|
||||
Builtin function. The function expects an identifier as argument in braces.
|
||||
The argument is evaluated, and the function yields "true" if the identifier
|
||||
is defined as an instruction mnemonic that is recognized by the assembler.
|
||||
Example:
|
||||
|
||||
<tscreen><verb>
|
||||
.if .not .ismnemonic(ina)
|
||||
.macro ina
|
||||
clc
|
||||
adc #$01
|
||||
.endmacro
|
||||
.endif
|
||||
</verb></tscreen>
|
||||
|
||||
|
||||
<sect1><tt>.LINECONT</tt><label id=".LINECONT"><p>
|
||||
|
||||
Switch on or off line continuations using the backslash character
|
||||
|
@ -3353,6 +3372,22 @@ Here's a list of all control commands and a description, what they do:
|
|||
</verb></tscreen>
|
||||
|
||||
|
||||
<sect1><tt>.LITERAL</tt><label id=".LITERAL"><p>
|
||||
|
||||
Define byte sized data. Must be followed by a sequence of (byte ranged)
|
||||
expressions or strings. Strings will disregard the current character
|
||||
mapping definition and will be interpreted literally.
|
||||
|
||||
Example:
|
||||
|
||||
<tscreen><verb>
|
||||
.literal "Hello "
|
||||
.literal "world", $0D, $00
|
||||
</verb></tscreen>
|
||||
|
||||
See: <tt><ref id=".ASCIIZ" name=".ASCIIZ"></tt>,<tt><ref id=".BYTE" name=".BYTE"></tt>
|
||||
|
||||
|
||||
<sect1><tt>.LOBYTES</tt><label id=".LOBYTES"><p>
|
||||
|
||||
Define byte sized data by extracting only the low byte (that is, bits 0-7) from
|
||||
|
@ -3590,6 +3625,29 @@ Here's a list of all control commands and a description, what they do:
|
|||
<tt><ref id=".P4510" name=".P4510"></tt>
|
||||
|
||||
|
||||
<sect1><tt>.PDTV</tt><label id=".PDTV"><p>
|
||||
|
||||
Enable the 6502DTV instruction set. This is a superset of the 6502
|
||||
instruction set.
|
||||
|
||||
See: <tt><ref id=".P02" name=".P02"></tt>
|
||||
|
||||
|
||||
<sect1><tt>.POPCHARMAP</tt><label id=".POPCHARMAP"><p>
|
||||
|
||||
Pop the last character mapping from the stack, and activate it.
|
||||
|
||||
This command will switch back to the character mapping that was last pushed onto the
|
||||
character mapping stack using the <tt><ref id=".PUSHCHARMAP" name=".PUSHCHARMAP"></tt>
|
||||
command, and remove this entry from the stack.
|
||||
|
||||
The assembler will print an error message if the mappting stack is empty when
|
||||
this command is issued.
|
||||
|
||||
See: <tt><ref id=".CHARMAP" name=".CHARMAP"></tt>, <tt><ref id=".PUSHCHARMAP"
|
||||
name=".PUSHCHARMAP"></tt>
|
||||
|
||||
|
||||
<sect1><tt>.POPCPU</tt><label id=".POPCPU"><p>
|
||||
|
||||
Pop the last CPU setting from the stack, and activate it.
|
||||
|
@ -3664,6 +3722,22 @@ Here's a list of all control commands and a description, what they do:
|
|||
<tt><ref id=".P4510" name=".P4510"></tt>
|
||||
|
||||
|
||||
<sect1><tt>.PUSHCHARMAP</tt><label id=".PUSHCHARMAP"><p>
|
||||
|
||||
Push the currently active character mapping onto a stack. The stack has a size of 16
|
||||
entries.
|
||||
|
||||
<tt/.PUSHCHARMAP/ allows together with <tt><ref id=".POPCHARMAP"
|
||||
name=".POPCHARMAP"></tt> to switch to another character mapping and to restore the old
|
||||
characther mapping later, without knowledge of the current mapping.
|
||||
|
||||
The assembler will print an error message if the character mapping stack is already full,
|
||||
when this command is issued.
|
||||
|
||||
See: <tt><ref id=".CHARMAP" name=".CHARMAP"></tt>, <tt><ref id=".POPCHARMAP"
|
||||
name=".POPCHARMAP"></tt>
|
||||
|
||||
|
||||
<sect1><tt>.PUSHCPU</tt><label id=".PUSHCPU"><p>
|
||||
|
||||
Push the currently active CPU onto a stack. The stack has a size of 8
|
||||
|
@ -3696,6 +3770,46 @@ Here's a list of all control commands and a description, what they do:
|
|||
See: <tt><ref id=".POPSEG" name=".POPSEG"></tt>
|
||||
|
||||
|
||||
<sect1><tt>.REFERTO, .REFTO</tt><label id=".REFERTO"><p>
|
||||
|
||||
Mark a symbol as referenced.
|
||||
|
||||
It is useful in combination with the <tt><ref id=".IFREF" name=".IFREF"></tt>
|
||||
command. A subroutine with two entry points can be created. When the first
|
||||
entry point is called, it sets some default value as an argument, and falls
|
||||
through into the second entry point. <tt>.REFERTO</tt> helps to ensure that
|
||||
the second part is included into binary when only the first entry point is
|
||||
actually used from the code.
|
||||
|
||||
Example:
|
||||
|
||||
<tscreen><verb>
|
||||
.ifref NegateValue ; If this subroutine is used
|
||||
NegateValue: ; Define it
|
||||
lda #0
|
||||
sec
|
||||
sbc Value
|
||||
.ifref ResetValue ; If the ResetValue is also used
|
||||
jmp SetValue ; Jump over it
|
||||
.else
|
||||
.refto SetValue ; Ensure that SetValue will be included
|
||||
.endif
|
||||
.endif
|
||||
|
||||
.ifref ResetValue ; If this subroutine is used
|
||||
ResetValue: ; Define it
|
||||
lda #0 ; Set a default value
|
||||
.refto SetValue ; Ensure that SetValue will be included
|
||||
.endif
|
||||
|
||||
.ifref SetValue ; If this or previous subroutine is used
|
||||
SetValue:
|
||||
sta Value
|
||||
rts
|
||||
.endif
|
||||
</verb></tscreen>
|
||||
|
||||
|
||||
<sect1><tt>.RELOC</tt><label id=".RELOC"><p>
|
||||
|
||||
Switch back to relocatable mode. See the <tt><ref id=".ORG"
|
||||
|
@ -3853,10 +3967,11 @@ Here's a list of all control commands and a description, what they do:
|
|||
Switch the CPU instruction set. The command is followed by a string that
|
||||
specifies the CPU. Possible values are those that can also be supplied to
|
||||
the <tt><ref id="option--cpu" name="--cpu"></tt> command line option,
|
||||
namely: 6502, 6502X, 65SC02, 65C02, 65816, 4510 and HuC6280.
|
||||
namely: 6502, 6502X, 6502DTV, 65SC02, 65C02, 65816, 4510 and HuC6280.
|
||||
|
||||
See: <tt><ref id=".CPU" name=".CPU"></tt>,
|
||||
<tt><ref id=".IFP02" name=".IFP02"></tt>,
|
||||
<tt><ref id=".IFPDTV" name=".IFPDTV"></tt>,
|
||||
<tt><ref id=".IFP816" name=".IFP816"></tt>,
|
||||
<tt><ref id=".IFPC02" name=".IFPC02"></tt>,
|
||||
<tt><ref id=".IFPSC02" name=".IFPSC02"></tt>,
|
||||
|
@ -4330,8 +4445,8 @@ different:
|
|||
For this macro type, the number of actual parameters must match
|
||||
exactly the number of formal parameters.
|
||||
|
||||
To make this possible, formal parameters are enclosed in braces when
|
||||
defining the macro. If there are no parameters, the empty braces may
|
||||
To make this possible, formal parameters are enclosed in parentheses when
|
||||
defining the macro. If there are no parameters, the empty parentheses may
|
||||
be omitted.
|
||||
|
||||
<item> Since <tt><ref id=".DEFINE" name=".DEFINE"></tt> style macros may not
|
||||
|
@ -4381,8 +4496,8 @@ Macros with parameters may also be useful:
|
|||
|
||||
Note that, while formal parameters have to be placed in parentheses,
|
||||
the actual argument used when invoking the macro should not be.
|
||||
The invoked arguments are separated by commas only, if parentheses are
|
||||
used by accident they will become part of the replaced token.
|
||||
The invoked arguments are separated by commas only; if parentheses are
|
||||
used by accident, they will become part of the replaced token.
|
||||
|
||||
If you wish to have an expression follow the macro invocation, the
|
||||
last parameter can be enclosed in curly braces {} to indicate the end of that
|
||||
|
@ -4591,6 +4706,7 @@ each supported CPU a constant similar to
|
|||
CPU_SWEET16
|
||||
CPU_HUC6280
|
||||
CPU_4510
|
||||
CPU_6502DTV
|
||||
</verb></tscreen>
|
||||
|
||||
is defined. These constants may be used to determine the exact type of the
|
||||
|
@ -4605,6 +4721,7 @@ another constant is defined:
|
|||
CPU_ISET_SWEET16
|
||||
CPU_ISET_HUC6280
|
||||
CPU_ISET_4510
|
||||
CPU_ISET_6502DTV
|
||||
</verb></tscreen>
|
||||
|
||||
The value read from the <tt/<ref id=".CPU" name=".CPU">/ pseudo variable may
|
||||
|
@ -4674,6 +4791,7 @@ compiler, depending on the target system selected:
|
|||
<item><tt/__SIM6502__/ - Target system is <tt/sim6502/
|
||||
<item><tt/__SIM65C02__/ - Target system is <tt/sim65c02/
|
||||
<item><tt/__SUPERVISION__/ - Target system is <tt/supervision/
|
||||
<item><tt/__SYM1__/ - Target system is <tt/sym1/
|
||||
<item><tt/__VIC20__/ - Target system is <tt/vic20/
|
||||
</itemize>
|
||||
|
||||
|
|
|
@ -231,10 +231,10 @@ The default drivers, <tt/mouse_stddrv (mouse_static_stddrv)/, point to <tt/cbm51
|
|||
|
||||
<tag><tt/cbm510-std.ser (cbm510_std_ser)/</tag>
|
||||
Driver for the 6551 ACIA chip built into the Commodore 510. Supports up to
|
||||
19200 BPS, hardware flow control (RTS/CTS), and interrupt-driven receives.
|
||||
Note that, because of the peculiarities of the 6551 chip, transmits are not
|
||||
interrupt driven; and, the transceiver blocks if the receiver asserts flow
|
||||
control because of a full buffer.
|
||||
19200 baud, requires hardware flow control (RTS/CTS) and does interrupt driven
|
||||
receives. Note that, because of the peculiarities of the 6551 chip, transmits
|
||||
are not interrupt driven; and, the transceiver blocks if the receiver asserts
|
||||
flow control because of a full buffer.
|
||||
|
||||
</descrip><p>
|
||||
|
||||
|
|
|
@ -212,10 +212,10 @@ No mouse drivers are currently available for the Commodore 610.
|
|||
|
||||
<tag><tt/cbm610-std.ser (cbm610_std_ser)/</tag>
|
||||
Driver for the 6551 ACIA chip built into the Commodore 610. Supports up to
|
||||
19200 BPS, hardware flow control (RTS/CTS), and interrupt-driven receives.
|
||||
Note that, because of the peculiarities of the 6551 chip, transmits are not
|
||||
interrupt driven; and, the transceiver blocks if the receiver asserts flow
|
||||
control because of a full buffer.
|
||||
19200 baud, requires hardware flow control (RTS/CTS) and does interrupt driven
|
||||
receives. Note that, because of the peculiarities of the 6551 chip, transmits
|
||||
are not interrupt driven; and, the transceiver blocks if the receiver asserts
|
||||
flow control because of a full buffer.
|
||||
|
||||
</descrip><p>
|
||||
|
||||
|
|
206
doc/cc65.sgml
206
doc/cc65.sgml
|
@ -6,8 +6,9 @@
|
|||
<url url="mailto:gregdk@users.sf.net" name="Greg King">
|
||||
|
||||
<abstract>
|
||||
cc65 is a C compiler for 6502 targets. It supports several 6502 based home
|
||||
computers like the Commodore and Atari machines, but it is easily retargetable.
|
||||
cc65 is a C compiler for 6502 targets. It supports several 6502-based home
|
||||
computers such as the Commodore and Atari machines, but it easily is
|
||||
retargetable.
|
||||
</abstract>
|
||||
|
||||
<!-- Table of contents -->
|
||||
|
@ -446,10 +447,10 @@ Here is a description of all the command line options:
|
|||
|
||||
Use static storage for local variables instead of storage on the stack.
|
||||
Since the stack is emulated in software, this gives shorter and usually
|
||||
faster code, but the code is no longer reentrant. The difference between
|
||||
<tt/-Cl/ and declaring local variables as static yourself is, that
|
||||
initializer code is executed each time, the function is entered. So when
|
||||
using
|
||||
faster code, but the code is no longer reentrant as required for recursion.
|
||||
The difference between <tt/-Cl/ and declaring local variables as static
|
||||
yourself is, that initializer code is executed each time, the function is
|
||||
entered. So when using
|
||||
|
||||
<tscreen><verb>
|
||||
void f (void)
|
||||
|
@ -545,13 +546,25 @@ Here is a description of all the command line options:
|
|||
Treat all warnings as errors.
|
||||
<tag><tt/no-effect/</tag>
|
||||
Warn about statements that don't have an effect.
|
||||
<tag><tt/pointer-sign/</tag>
|
||||
Warn if a pointer assignment changes the signedness of the target
|
||||
of a pointer value, and the new signedness wasn't cast explicitly.
|
||||
<tag><tt/pointer-types/</tag>
|
||||
Warn if a pointer assignment changes the type of the target
|
||||
of a pointer value, and the new type wasn't cast explicitly.
|
||||
<tag><tt/remap-zero/</tag>
|
||||
Warn about a <tt/<ref id="pragma-charmap" name="#pragma charmap()">/
|
||||
that changes a character's code number from/to 0x00.
|
||||
<tag><tt/return-type/</tag>
|
||||
Warn about no return statement in function returning non-void.
|
||||
<tag><tt/struct-param/</tag>
|
||||
Warn when passing structs by value.
|
||||
<tag><tt/unknown-pragma/</tag>
|
||||
Warn about #pragmas that aren't recognized by cc65.
|
||||
<tag><tt/unreachable-code/</tag>
|
||||
Warn about unreachable code in cases of comparing constants, etc.
|
||||
<tag><tt/unused-func/</tag>
|
||||
Warn about unused functions.
|
||||
<tag><tt/unused-label/</tag>
|
||||
Warn about unused labels.
|
||||
<tag><tt/unused-param/</tag>
|
||||
|
@ -706,12 +719,13 @@ This cc65 version has some extensions to the ISO C standard.
|
|||
places.
|
||||
<p>
|
||||
|
||||
<item> There are two pseudo variables named <tt/__AX__/ and <tt/__EAX__/.
|
||||
Both refer to the primary register that is used by the compiler to
|
||||
evaluate expressions or return function results. <tt/__AX__/ is of
|
||||
type <tt/unsigned int/ and <tt/__EAX__/ of type <tt/long unsigned int/
|
||||
respectively. The pseudo variables may be used as lvalue and rvalue as
|
||||
every other variable. They are most useful together with short
|
||||
<item> There are three pseudo variables named <tt/__A__/, <tt/__AX__/ and
|
||||
<tt/__EAX__/. They all refer to the primary register that is used
|
||||
by the compiler to evaluate expressions or return function results.
|
||||
<tt/__A__/ is of type <tt/unsigned char/, <tt/__AX__/ is of type
|
||||
<tt/unsigned int/ and <tt/__EAX__/ of type <tt/long unsigned int/
|
||||
respectively. The pseudo variables may be used as lvalue and rvalue
|
||||
as every other variable. They are most useful together with short
|
||||
sequences of assembler code. For example, the macro
|
||||
|
||||
<tscreen><verb>
|
||||
|
@ -792,6 +806,26 @@ This cc65 version has some extensions to the ISO C standard.
|
|||
size zero, even if it is initialized.
|
||||
<p>
|
||||
|
||||
<item> cc65 supports <tt/_Static_assert/ from C11 and C2X. This is similar
|
||||
to <tt/#error/ but happens at a later stage of translation, so types
|
||||
can be used.
|
||||
|
||||
<tscreen><verb>
|
||||
/* C11 version with message. */
|
||||
_Static_assert (sizeof (int) == 2, "Expected 2-bytes ints.");
|
||||
|
||||
/* C2X version without message. */
|
||||
_Static_assert (sizeof (int) == 2);
|
||||
</verb></tscreen>
|
||||
|
||||
<tt/_Static_assert/ is also available as the macro <tt/static_assert/ in
|
||||
<tt/assert.h/.
|
||||
|
||||
<item> cc65 supports bit-fields of any integral type that is int-sized or
|
||||
smaller, and enumerated types with those types as their underlying
|
||||
type. (Only <tt/int/, <tt/signed int/, and <tt/unsigned int/ are
|
||||
required by the standard.)
|
||||
|
||||
<item> Computed gotos, a GCC extension, has limited support. With it you can
|
||||
use fast jump tables from C. You can take the address of a label with
|
||||
a double ampersand, putting them in a static const array of type void *.
|
||||
|
@ -988,10 +1022,14 @@ The compiler defines several macros at startup:
|
|||
|
||||
This macro is defined if the target is the Supervision (-t supervision).
|
||||
|
||||
<tag><tt>__SYM1__</tt></tag>
|
||||
|
||||
This macro is defined if the target is the Sym-1 (-t sym1).
|
||||
|
||||
<tag><tt>__TELESTRAT__</tt></tag>
|
||||
|
||||
This macro is defined if the target is the Telestrat (-t telestrat).
|
||||
|
||||
|
||||
<tag><tt>__TIME__</tt></tag>
|
||||
|
||||
This macro expands to the time of translation of the preprocessing
|
||||
|
@ -1025,25 +1063,39 @@ parameter with the <tt/#pragma/.
|
|||
The <tt/#pragma/ understands the push and pop parameters as explained above.
|
||||
|
||||
|
||||
<sect1><tt>#pragma bss-name ([push,] <name>)</tt><label id="pragma-bss-name"><p>
|
||||
<sect1><tt>#pragma bss-name ([push, ]<name>[ ,<addrsize>])</tt><label id="pragma-bss-name"><p>
|
||||
|
||||
This pragma changes the name used for the BSS segment (the BSS segment
|
||||
is used to store uninitialized data). The argument is a string enclosed
|
||||
in double quotes.
|
||||
This pragma changes the name used for the BSS segment (the BSS segment is
|
||||
used to store variables with static storage duration and no explicit
|
||||
initializers). The <tt/name/ argument is a string enclosed in quotation
|
||||
marks.
|
||||
|
||||
Note: The default linker configuration file does only map the standard
|
||||
segments. If you use other segments, you have to create a new linker
|
||||
configuration file.
|
||||
<tt/addrsize/ is an optional string that gives a hint about where the
|
||||
<tt/name/ segment will be put in the CPU's address space. It describes the
|
||||
width of address numbers that point into that segment. Only words that
|
||||
are known to ca65 are allowed:
|
||||
<enum>
|
||||
<item>"zp", "zeropage", "direct"
|
||||
<item>"abs", "absolute", "near", "default"
|
||||
<item>"far"
|
||||
<item>"long", "dword"
|
||||
</enum>
|
||||
|
||||
Beware: The startup code will zero only the default BSS segment. If you
|
||||
use another BSS segment, you have to do that yourself, otherwise
|
||||
uninitialized variables do not have the value zero.
|
||||
Note: The default linker configuration file maps only the standard segments.
|
||||
If you use other segments, you must create a new linker configuration file.
|
||||
|
||||
The <tt/#pragma/ understands the push and pop parameters as explained above.
|
||||
Beware: The start-up code will zero only the default BSS segment. If you use
|
||||
another BSS segment, then you must do that yourself; otherwise, variables
|
||||
with static storage duration and no explicit initializer will not have the
|
||||
value zero.
|
||||
|
||||
Example:
|
||||
The <tt/#pragma/ understands the push and pop parameters, as explained above.
|
||||
|
||||
Examples:
|
||||
<tscreen><verb>
|
||||
#pragma bss-name ("MyBSS")
|
||||
#pragma bss-name ("MyBSS")
|
||||
#pragma bss-name (push, "MyBSS")
|
||||
#pragma bss-name ("MyBSS", "zp")
|
||||
</verb></tscreen>
|
||||
|
||||
|
||||
|
@ -1099,21 +1151,33 @@ parameter with the <tt/#pragma/.
|
|||
The <tt/#pragma/ understands the push and pop parameters as explained above.
|
||||
|
||||
|
||||
<sect1><tt>#pragma code-name ([push,] <name>)</tt><label id="pragma-code-name"><p>
|
||||
<sect1><tt>#pragma code-name ([push, ]<name>[ ,<addrsize>])</tt><label id="pragma-code-name"><p>
|
||||
|
||||
This pragma changes the name used for the CODE segment (the CODE segment
|
||||
is used to store executable code). The argument is a string enclosed in
|
||||
double quotes.
|
||||
This pragma changes the name used for the CODE segment (the CODE segment is
|
||||
used to store executable code). The <tt/name/ argument is a string enclosed
|
||||
in quotation marks.
|
||||
|
||||
Note: The default linker configuration file does only map the standard
|
||||
segments. If you use other segments, you have to create a new linker
|
||||
configuration file.
|
||||
<tt/addrsize/ is an optional string that gives a hint about where the
|
||||
<tt/name/ segment will be put in the CPU's address space. It describes the
|
||||
width of address numbers that point into that segment. Only words that
|
||||
are known to ca65 are allowed:
|
||||
<enum>
|
||||
<item>"zp", "zeropage", "direct"
|
||||
<item>"abs", "absolute", "near", "default"
|
||||
<item>"far"
|
||||
<item>"long", "dword"
|
||||
</enum>
|
||||
|
||||
The <tt/#pragma/ understands the push and pop parameters as explained above.
|
||||
Note: The default linker configuration file maps only the standard segments.
|
||||
If you use other segments, you must create a new linker configuration file.
|
||||
|
||||
Example:
|
||||
The <tt/#pragma/ understands the push and pop parameters, as explained above.
|
||||
|
||||
Examples:
|
||||
<tscreen><verb>
|
||||
#pragma code-name ("MyCODE")
|
||||
#pragma code-name ("MyCODE")
|
||||
#pragma code-name (push, "MyCODE")
|
||||
#pragma code-name (push, "MyCODE", "far")
|
||||
</verb></tscreen>
|
||||
|
||||
|
||||
|
@ -1127,21 +1191,33 @@ parameter with the <tt/#pragma/.
|
|||
The <tt/#pragma/ understands the push and pop parameters as explained above.
|
||||
|
||||
|
||||
<sect1><tt>#pragma data-name ([push,] <name>)</tt><label id="pragma-data-name"><p>
|
||||
<sect1><tt>#pragma data-name ([push, ]<name>[ ,<addrsize>])</tt><label id="pragma-data-name"><p>
|
||||
|
||||
This pragma changes the name used for the DATA segment (the DATA segment
|
||||
is used to store initialized data). The argument is a string enclosed in
|
||||
double quotes.
|
||||
This pragma changes the name used for the DATA segment (the DATA segment is
|
||||
used to store initialized data). The <tt/name/ argument is a string enclosed
|
||||
in quotation marks.
|
||||
|
||||
Note: The default linker configuration file does only map the standard
|
||||
segments. If you use other segments, you have to create a new linker
|
||||
configuration file.
|
||||
<tt/addrsize/ is an optional string that gives a hint about where the
|
||||
<tt/name/ segment will be put in the CPU's address space. It describes the
|
||||
width of address numbers that point into that segment. Only words that
|
||||
are known to ca65 are allowed:
|
||||
<enum>
|
||||
<item>"zp", "zeropage", "direct"
|
||||
<item>"abs", "absolute", "near", "default"
|
||||
<item>"far"
|
||||
<item>"long", "dword"
|
||||
</enum>
|
||||
|
||||
The <tt/#pragma/ understands the push and pop parameters as explained above.
|
||||
Note: The default linker configuration file maps only the standard segments.
|
||||
If you use other segments, you must create a new linker configuration file.
|
||||
|
||||
Example:
|
||||
The <tt/#pragma/ understands the push and pop parameters, as explained above.
|
||||
|
||||
Examples:
|
||||
<tscreen><verb>
|
||||
#pragma data-name ("MyDATA")
|
||||
#pragma data-name ("MyDATA")
|
||||
#pragma data-name (push, "MyDATA")
|
||||
#pragma data-name ("MyDATA", "zeropage")
|
||||
</verb></tscreen>
|
||||
|
||||
|
||||
|
@ -1203,21 +1279,32 @@ parameter with the <tt/#pragma/.
|
|||
The <tt/#pragma/ understands the push and pop parameters as explained above.
|
||||
|
||||
|
||||
<sect1><tt>#pragma rodata-name ([push,] <name>)</tt><label id="pragma-rodata-name"><p>
|
||||
<sect1><tt>#pragma rodata-name ([push, ]<name>[ ,<addrsize>])</tt><label id="pragma-rodata-name"><p>
|
||||
|
||||
This pragma changes the name used for the RODATA segment (the RODATA
|
||||
segment is used to store readonly data). The argument is a string
|
||||
enclosed in double quotes.
|
||||
This pragma changes the name used for the RODATA segment (the RODATA segment
|
||||
is used to store read-only data). The <tt/name/ argument is a string enclosed
|
||||
in quotation marks.
|
||||
|
||||
Note: The default linker configuration file does only map the standard
|
||||
segments. If you use other segments, you have to create a new linker
|
||||
configuration file.
|
||||
<tt/addrsize/ is an optional string that gives a hint about where the
|
||||
<tt/name/ segment will be put in the CPU's address space. It describes the
|
||||
width of address numbers that point into that segment. Only words that
|
||||
are known to ca65 are allowed:
|
||||
<enum>
|
||||
<item>"zp", "zeropage", "direct"
|
||||
<item>"abs", "absolute", "near", "default"
|
||||
<item>"far"
|
||||
<item>"long", "dword"
|
||||
</enum>
|
||||
|
||||
The <tt/#pragma/ understands the push and pop parameters as explained above.
|
||||
Note: The default linker configuration file maps only the standard segments.
|
||||
If you use other segments, you must create a new linker configuration file.
|
||||
|
||||
Example:
|
||||
The <tt/#pragma/ understands the push and pop parameters, as explained above.
|
||||
|
||||
Examples:
|
||||
<tscreen><verb>
|
||||
#pragma rodata-name ("MyRODATA")
|
||||
#pragma rodata-name ("MyRODATA")
|
||||
#pragma rodata-name (push, "MyRODATA")
|
||||
</verb></tscreen>
|
||||
|
||||
|
||||
|
@ -1307,7 +1394,12 @@ parameter with the <tt/#pragma/.
|
|||
the <tt/Y/ register if it wraps any variadic functions (they have "<tt/.../"
|
||||
in their prototypes).
|
||||
|
||||
The identifier is an 8-bit number that's set into <tt/tmp4/.
|
||||
The identifier is an 8-bit number that's set into <tt/tmp4/. If the identifier
|
||||
is "bank", then ca65's <tt><url url="ca65.html#.BANK" name=".bank"></tt> function will be used
|
||||
to determine the number from the bank attribute defined in the linker config,
|
||||
see <url url="ld65.html#MEMORY" name="Other MEMORY area attributes">. Note that
|
||||
this currently implies that only the least significant 8 bits of the bank attribute
|
||||
can be used.
|
||||
|
||||
The address of a wrapped function is passed in <tt/ptr4/. The wrapper can
|
||||
call that function by using "<tt/jsr callptr4/".
|
||||
|
|
106
doc/cx16.sgml
106
doc/cx16.sgml
|
@ -16,9 +16,12 @@ compiler.
|
|||
|
||||
<sect>Overview<p>
|
||||
|
||||
The Commander X16 is a modern small computer with firmware that is based on
|
||||
the ROMs in Commodore's VIC-20 and 64C. It has a couple of I/O chips
|
||||
(WDC65C22 VIA) that are like the ones in the VIC-20.
|
||||
The Commander X16 is a modern small computer with firmware that is based partly
|
||||
on the ROMs in Commodore's VIC-20 and 64C. It has a couple of I/O chips
|
||||
(WDC65C22 VIA) that are like the ones in the VIC-20. It supports file storage
|
||||
on Secure Digital cards. It allows two joysticks and a mouse. It has three
|
||||
sound devices. Its VGA screen has twice the range of the C64 (similar to the
|
||||
C128's 80-column screen), with 256 colors.
|
||||
|
||||
This file contains an overview of the CX16 run-time system as it comes with the
|
||||
cc65 C compiler. It describes the memory layout, CX16-specific header files,
|
||||
|
@ -108,7 +111,7 @@ cl65 -o file.prg -t cx16 -C cx16-asm.cfg source.s
|
|||
|
||||
To generate code that loads to $A000:
|
||||
<tscreen><verb>
|
||||
cl65 -o file.prg -Wl -S,$A000 -t cX16 -C cX16-asm.cfg source.s
|
||||
cl65 -o file.prg -Wl -S,$A000 -t cx16 -C cx16-asm.cfg source.s
|
||||
</verb></tscreen>
|
||||
|
||||
It also is possible to add a small BASIC header to the program, that uses SYS
|
||||
|
@ -139,13 +142,20 @@ The functions listed below are special for the CX16. See the <url
|
|||
url="funcref.html" name="function reference"> for declarations and usage.
|
||||
|
||||
<itemize>
|
||||
<item>get_ostype
|
||||
<item>set_tv
|
||||
<item>videomode
|
||||
<item>vpeek
|
||||
<item>vpoke
|
||||
<item>get_ostype()
|
||||
<item>set_tv()
|
||||
<item>videomode()
|
||||
<item>vpeek()
|
||||
<item>vpoke()
|
||||
</itemize>
|
||||
|
||||
<tt/cpeekcolor()/ works differently on the Commander X16 than it does on other
|
||||
platforms. Each character has two colors: background and text (foreground).
|
||||
<tt/cpeekcolor()/ returns both colors. The high nybble describes the
|
||||
background color, the low nybble describes the text color. For example, if the
|
||||
function is used on the default screen, then it returns $61, which means
|
||||
white-on-blue.
|
||||
|
||||
|
||||
<sect1>CBM-specific functions<p>
|
||||
|
||||
|
@ -154,32 +164,32 @@ machines. See the <url url="funcref.html" name="function reference"> for
|
|||
declarations and usage.
|
||||
|
||||
<itemize>
|
||||
<item>cbm_close
|
||||
<item>cbm_closedir
|
||||
<item>cbm_k_basin
|
||||
<item>cbm_k_bsout
|
||||
<item>cbm_k_chkin
|
||||
<item>cbm_k_ckout
|
||||
<item>cbm_k_close
|
||||
<item>cbm_k_clrch
|
||||
<item>cbm_k_getin
|
||||
<item>cbm_k_load
|
||||
<item>cbm_k_open
|
||||
<item>cbm_k_readst
|
||||
<item>cbm_k_save
|
||||
<item>cbm_k_second
|
||||
<item>cbm_k_setlfs
|
||||
<item>cbm_k_setnam
|
||||
<item>cbm_k_tksa
|
||||
<item>cbm_load
|
||||
<item>cbm_open
|
||||
<item>cbm_opendir
|
||||
<item>cbm_read
|
||||
<item>cbm_readdir
|
||||
<item>cbm_save
|
||||
<item>cbm_write
|
||||
<item>get_tv
|
||||
<item>waitvsync
|
||||
<item>cbm_close()
|
||||
<item>cbm_closedir()
|
||||
<item>cbm_k_basin()
|
||||
<item>cbm_k_bsout()
|
||||
<item>cbm_k_chkin()
|
||||
<item>cbm_k_ckout()
|
||||
<item>cbm_k_close()
|
||||
<item>cbm_k_clrch()
|
||||
<item>cbm_k_getin()
|
||||
<item>cbm_k_load()
|
||||
<item>cbm_k_open()
|
||||
<item>cbm_k_readst()
|
||||
<item>cbm_k_save()
|
||||
<item>cbm_k_second()
|
||||
<item>cbm_k_setlfs()
|
||||
<item>cbm_k_setnam()
|
||||
<item>cbm_k_tksa()
|
||||
<item>cbm_load()
|
||||
<item>cbm_open()
|
||||
<item>cbm_opendir()
|
||||
<item>cbm_read()
|
||||
<item>cbm_readdir()
|
||||
<item>cbm_save()
|
||||
<item>cbm_write()
|
||||
<item>get_tv()
|
||||
<item>waitvsync()
|
||||
</itemize>
|
||||
|
||||
|
||||
|
@ -208,12 +218,22 @@ structures, accessing the struct fields will access the chip registers.
|
|||
|
||||
<sect>Loadable drivers<p>
|
||||
|
||||
The names in the parentheses denote the symbols to be used for static linking of the drivers.
|
||||
The names in the parentheses denote the symbols to be used for static linking
|
||||
of the drivers. The names fit into the 8.3 character limit of the SD-Card's
|
||||
FAT32 file-system.
|
||||
|
||||
|
||||
<sect1>Graphics drivers<p>
|
||||
|
||||
No graphics drivers are available currently for the CX16.
|
||||
The default drivers, <tt/tgi_stddrv (tgi_static_stddrv)/,
|
||||
point to <tt/cx320p1.tgi (cx320p1_tgi)/.
|
||||
|
||||
<descrip>
|
||||
<tag><tt/cx320p1.tgi (cx320p1_tgi)/</tag>
|
||||
This driver features a resolution of 320 across and 200 down with 256 colors,
|
||||
and a slightly adjustable palette (the order of the colors can be changed in
|
||||
a way that's compatible with some of the other color drivers).
|
||||
</descrip><p>
|
||||
|
||||
|
||||
<sect1>Extended memory drivers<p>
|
||||
|
@ -224,10 +244,10 @@ No extended memory drivers are available currently for the CX16.
|
|||
<sect1>Joystick drivers<p>
|
||||
|
||||
The default drivers, <tt/joy_stddrv (joy_static_stddrv)/,
|
||||
point to <tt/cX16-std.joy (cx16_std_joy)/.
|
||||
point to <tt/cx16-std.joy (cx16_std_joy)/.
|
||||
|
||||
<descrip>
|
||||
<tag><tt/cX16-std.joy (cX16_std_joy)/</tag>
|
||||
<tag><tt/cx16-std.joy (cx16_std_joy)/</tag>
|
||||
Supports up to two NES (and SNES) controllers connected to the joystick ports
|
||||
of the CX16. It reads the four directions, and the <bf/A/, <bf/B/,
|
||||
<bf/Select/, and <bf/Start/ buttons. Buttons <bf/A/ and <bf/B/ are
|
||||
|
@ -238,15 +258,15 @@ point to <tt/cX16-std.joy (cx16_std_joy)/.
|
|||
<sect1>Mouse drivers<p>
|
||||
|
||||
The default drivers, <tt/mouse_stddrv (mouse_static_stddrv)/,
|
||||
point to <tt/cX16-std.mou (cx16_std_mou)/.
|
||||
point to <tt/cx16-std.mou (cx16_std_mou)/.
|
||||
|
||||
<descrip>
|
||||
<tag><tt/cX16-std.mou (cX16_std_mou)/</tag>
|
||||
<tag><tt/cx16-std.mou (cx16_std_mou)/</tag>
|
||||
Supports a standard 3-button mouse connected to the PS/2 mouse port of the
|
||||
Commander X16.
|
||||
|
||||
Currently (r35), this driver doesn't support <tt/mouse_move()/
|
||||
and <tt/mouse_setbox()/.
|
||||
Currently, this driver doesn't support <tt/mouse_move()/ and
|
||||
<tt/mouse_setbox()/.
|
||||
</descrip><p>
|
||||
|
||||
|
||||
|
|
|
@ -112,15 +112,17 @@ Here is a description of all the command line options:
|
|||
<itemize>
|
||||
<item>6502
|
||||
<item>6502x
|
||||
<item>6502dtv
|
||||
<item>65sc02
|
||||
<item>65c02
|
||||
<item>huc6280
|
||||
<item>4510
|
||||
</itemize>
|
||||
|
||||
6502x is for the NMOS 6502 with unofficial opcodes. huc6280 is the CPU of
|
||||
the PC engine. 4510 is the CPU of the Commodore C65. Support for the 65816
|
||||
currently is not available.
|
||||
6502x is for the NMOS 6502 with unofficial opcodes. 6502dtv is for the
|
||||
emulated CPU of the C64DTV device. huc6280 is the CPU of the PC engine.
|
||||
4510 is the CPU of the Commodore C65. Support for the 65816 currently
|
||||
is not available.
|
||||
|
||||
|
||||
<label id="option--formfeeds">
|
||||
|
@ -251,7 +253,10 @@ for this CPU. Invalid opcodes are translated into <tt/.byte/ commands.
|
|||
With the command line option <tt><ref id="option--cpu" name="--cpu"></tt>, the
|
||||
disassembler may be told to recognize either the 65SC02 or 65C02 CPUs. The
|
||||
latter understands the same opcodes as the former, plus 16 additional bit
|
||||
manipulation and bit test-and-branch commands.
|
||||
manipulation and bit test-and-branch commands. Using 6502x as CPU the illegal
|
||||
opcodes of 6502 CPU are detected and displayed. 6502dtv setting recognizes the
|
||||
emulated CPU instructons of the C64DTV device.
|
||||
|
||||
|
||||
When disassembling 4510 code, due to handling of 16-bit wide branches, da65
|
||||
can produce output that can not be re-assembled, when one or more of those
|
||||
|
|
132
doc/funcref.sgml
132
doc/funcref.sgml
|
@ -298,6 +298,16 @@ function.
|
|||
</itemize>
|
||||
|
||||
|
||||
<sect1><tt/creativision.h/<label id="creativision.h"><p>
|
||||
|
||||
<itemize>
|
||||
<item><ref id="bios_playsound" name="bios_playsound">
|
||||
<item><ref id="psg_delay" name="psg_delay">
|
||||
<item><ref id="psg_outb" name="psg_outb">
|
||||
<item><ref id="psg_silence" name="psg_silence">
|
||||
</itemize>
|
||||
|
||||
|
||||
<sect1><tt/ctype.h/<label id="ctype.h"><p>
|
||||
|
||||
<itemize>
|
||||
|
@ -1684,6 +1694,44 @@ used in presence of a prototype.
|
|||
</quote>
|
||||
|
||||
|
||||
<sect1>bios_playsound<label id="bios_playsound"><p>
|
||||
|
||||
<quote>
|
||||
<descrip>
|
||||
<tag/Function/Play a sequence of musical notes.
|
||||
<tag/Header/<tt/<ref id="creativision.h" name="creativision.h">/
|
||||
<tag/Declaration/<tt/void __fastcall__ bios_playsound (const void *a, unsigned char b);/
|
||||
<tag/Description/The function plays chords based on a BASIC statement. Notes and
|
||||
durations are defined in the BASIC manual, chapter 13 on pages 102 resp. 103.
|
||||
<tag/Notes/<itemize>
|
||||
<item>BASIC has a fixed tempo of 18.
|
||||
<item>The function is only available as fastcall function, so it may only be
|
||||
used in presence of a prototype.
|
||||
</itemize>
|
||||
<tag/Availability/cc65
|
||||
<tag/See also/
|
||||
<ref id="psg_delay" name="psg_delay">,
|
||||
<ref id="psg_outb" name="psg_outb">
|
||||
<tag/Example/<verb>
|
||||
#include <creativision.h>
|
||||
void main (void)
|
||||
{
|
||||
static const unsigned char notes[] = {
|
||||
0x77, 0x4F, 0x37,
|
||||
0x4B, 0x05, 0xBB,
|
||||
0x4F, 0x27, 0x83,
|
||||
0x93, 0x9B, 0x93,
|
||||
0x17, 0x4F, 0x96, // played backwards
|
||||
0xAB, 0x17, 0x4F, // three-note chords
|
||||
0x0E // tempo
|
||||
};
|
||||
bios_playsound (notes, sizeof notes);
|
||||
}
|
||||
</verb>
|
||||
</descrip>
|
||||
</quote>
|
||||
|
||||
|
||||
<sect1>bordercolor<label id="bordercolor"><p>
|
||||
|
||||
<quote>
|
||||
|
@ -1778,7 +1826,7 @@ be used in presence of a prototype.
|
|||
<item>The function is specific to the C128.
|
||||
<item>The function will not return to the caller.
|
||||
</itemize>
|
||||
<tag/Availability/C128
|
||||
<tag/Availability/cc65
|
||||
<tag/Example/None.
|
||||
</descrip>
|
||||
</quote>
|
||||
|
@ -2813,6 +2861,8 @@ location of the cursor in the display screen RAM. That number can be passed to
|
|||
done to make it obvious that peeking doesn't move the cursor in any way. Your
|
||||
program must place the cursor where it wants to peek before it calls any of
|
||||
those functions.
|
||||
<item>On the cx16 (Commander X16) target, this function returns two values: the
|
||||
background color, in the high nybble, and the text color, in the low nybble.
|
||||
</itemize>
|
||||
<tag/Availability/cc65
|
||||
<tag/See also/
|
||||
|
@ -3408,7 +3458,7 @@ loaded.
|
|||
<descrip>
|
||||
<tag/Function/Install an already loaded extended memory driver.
|
||||
<tag/Header/<tt/<ref id="em.h" name="em.h">/
|
||||
<tag/Declaration/<tt/unsigned char _fastcall__ em_install (void* driver);/
|
||||
<tag/Declaration/<tt/unsigned char _fastcall__ em_install (const void* driver);/
|
||||
<tag/Description/The function installs an already loaded extended memory driver
|
||||
and returns an error code. The function may be used to install a driver linked
|
||||
statically to the program.
|
||||
|
@ -4731,7 +4781,7 @@ There's no way to check for the number of actually connected joysticks.
|
|||
<descrip>
|
||||
<tag/Function/Install an already loaded driver and return an error code.
|
||||
<tag/Header/<tt/<ref id="joystick.h" name="joystick.h">/
|
||||
<tag/Declaration/<tt/unsigned char __fastcall__ joy_install (void* driver);/
|
||||
<tag/Declaration/<tt/unsigned char __fastcall__ joy_install (const void* driver);/
|
||||
<tag/Description/The function installs a driver that was already loaded into
|
||||
memory (or linked statically to the program). It returns an error code
|
||||
(<tt/JOY_ERR_OK/ in case of success).
|
||||
|
@ -5184,7 +5234,7 @@ the module just loaded. Possible error codes are:
|
|||
<item><tt/MLOAD_ERR_MEM/ - Not enough memory
|
||||
</itemize>
|
||||
<tag/Notes/<itemize>
|
||||
<item>The <htmlurl url="ld65.html" name="ld65"> linker is needed to create
|
||||
<item>The <url url="ld65.html" name="ld65 linker"> is needed to create
|
||||
relocatable o65 modules for use with this function.
|
||||
<item>The function is available only as a fastcall function; so, it may be used
|
||||
only in the presence of a prototype.
|
||||
|
@ -5767,6 +5817,78 @@ be used in presence of a prototype.
|
|||
</quote>
|
||||
|
||||
|
||||
<sect1>psg_delay<label id="psg_delay"><p>
|
||||
|
||||
<quote>
|
||||
<descrip>
|
||||
<tag/Function/Delay for a short period of time.
|
||||
<tag/Header/<tt/<ref id="creativision.h" name="creativision.h">/
|
||||
<tag/Declaration/<tt/void __fastcall__ psg_delay (unsigned char b);/
|
||||
<tag/Description/The function specifies how long each note or pause between
|
||||
notes should last.
|
||||
<tag/Notes/<itemize>
|
||||
<item>The function is only available as fastcall function, so it may only be
|
||||
used in presence of a prototype.
|
||||
</itemize>
|
||||
<tag/Availability/cc65
|
||||
<tag/See also/
|
||||
<ref id="psg_outb" name="psg_outb">,
|
||||
<ref id="psg_silence" name="psg_silence">
|
||||
<tag/Example/None.
|
||||
</descrip>
|
||||
</quote>
|
||||
|
||||
|
||||
<sect1>psg_outb<label id="psg_outb"><p>
|
||||
|
||||
<quote>
|
||||
<descrip>
|
||||
<tag/Function/Output a byte to the PSG.
|
||||
<tag/Header/<tt/<ref id="creativision.h" name="creativision.h">/
|
||||
<tag/Declaration/<tt/void __fastcall__ psg_outb (unsigned char b);/
|
||||
<tag/Description/The function sends a byte to the Programmable Sound
|
||||
Generator, then waits for the PSG to acknowledge.
|
||||
<tag/Notes/<itemize>
|
||||
<item>The function is only available as fastcall function, so it may only be
|
||||
used in presence of a prototype.
|
||||
</itemize>
|
||||
<tag/Availability/cc65
|
||||
<tag/See also/
|
||||
<ref id="psg_delay" name="psg_delay">,
|
||||
<ref id="psg_silence" name="psg_silence">
|
||||
<tag/Example/<verb>
|
||||
#include <creativision.h>
|
||||
void main (void)
|
||||
{
|
||||
psg_outb (0x80); // Latch frequency
|
||||
psg_outb (0x07); // Frequency byte 2
|
||||
psg_outb (0x90); // Channel 0 full volume
|
||||
psg_delay (100);
|
||||
psg_silence ();
|
||||
}
|
||||
</verb>
|
||||
</descrip>
|
||||
</quote>
|
||||
|
||||
|
||||
<sect1>psg_silence<label id="psg_silence"><p>
|
||||
|
||||
<quote>
|
||||
<descrip>
|
||||
<tag/Function/Set volume off on each PSG channel.
|
||||
<tag/Header/<tt/<ref id="creativision.h" name="creativision.h">/
|
||||
<tag/Declaration/<tt/void psg_silence (void);/
|
||||
<tag/Description/The function resets the Programmable Sound Generator,
|
||||
then sends $9F, $BF, $DF, $FF to the PSG.
|
||||
<tag/Availability/cc65
|
||||
<tag/See also/
|
||||
<ref id="psg_delay" name="psg_delay">,
|
||||
<ref id="psg_outb" name="psg_outb">
|
||||
<tag/Example/None.
|
||||
</descrip>
|
||||
</quote>
|
||||
|
||||
|
||||
<sect1>qsort<label id="qsort"><p>
|
||||
|
||||
<quote>
|
||||
|
@ -6196,7 +6318,7 @@ while (ser_get(&ch) == SER_ERR_NO_DATA)
|
|||
<descrip>
|
||||
<tag/Function/Install an already loaded driver and return an error code.
|
||||
<tag/Header/<tt/<ref id="serial.h" name="serial.h">/
|
||||
<tag/Declaration/<tt/unsigned char __fastcall__ ser_install (void* driver);/
|
||||
<tag/Declaration/<tt/unsigned char __fastcall__ ser_install (const void* driver);/
|
||||
<tag/Description/The function installs a driver that was already loaded into
|
||||
memory (or linked statically to the program). It returns an error code
|
||||
(<tt/SER_ERR_OK/ in case of success).
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<article>
|
||||
<title>Gamate System specific information for cc65
|
||||
<author>
|
||||
<url url="mailto:groepaz@gmx.net" name="Groepaz/Hitmen">
|
||||
<url url="mailto:groepaz@gmx.net" name="Groepaz">
|
||||
|
||||
<abstract>
|
||||
An overview over the Gamate runtime system as it is implemented for the
|
||||
|
@ -117,14 +117,7 @@ following functions (and a few others):
|
|||
<sect>Other hints<p>
|
||||
|
||||
<itemize>
|
||||
<item>The Gamate is emulated by MESS (<url url="http://www.mess.org/">),
|
||||
run like this: <tt>mess gamate -debug -window -skip_gameinfo -cart test.bin</tt>
|
||||
</itemize>
|
||||
|
||||
some resources on the Gamate:
|
||||
|
||||
<itemize>
|
||||
<item><url url="http://en.wikipedia.org/wiki/Gamate">
|
||||
<item>some resources on the Gamate: <url url="http://en.wikipedia.org/wiki/Gamate">
|
||||
</itemize>
|
||||
|
||||
<sect>License<p>
|
||||
|
|
|
@ -205,7 +205,7 @@ see them together in the filling box in GeoPaint.
|
|||
|
||||
<sect2>GraphicsString
|
||||
<p>
|
||||
<tt/void GraphicsString (char *myGString)/
|
||||
<tt/void GraphicsString (const void *myGString)/
|
||||
<p>
|
||||
One of the more powerfull routines of GEOS. This function calls other graphic functions depending
|
||||
on the given command string. See the structures chapter for a more detailed description.
|
||||
|
@ -722,9 +722,9 @@ disk. Otherwise they will be lost. Operating area is the <tt/curDirHead/.
|
|||
This function returns the number of free blocks on the current disk. It is counted using data in
|
||||
<tt/curDirHead/ so you must initialize the disk before calling it.
|
||||
|
||||
<sect3>ChkDskGEOS
|
||||
<sect3>ChkDkGEOS
|
||||
<p>
|
||||
<tt/char ChkDskGEOS (void)/
|
||||
<tt/char ChkDkGEOS (void)/
|
||||
<p>
|
||||
This functions checks <tt/curDirHead/ for the GEOS Format identifier. It returns either true or false,
|
||||
and also sets <tt/isGEOS/ properly. You must initialize the disk before using this.
|
||||
|
@ -858,20 +858,21 @@ The functions described here are common for SEQ and VLIR structures.
|
|||
<p>
|
||||
<tt/struct filehandle *GetNxtDirEntry (void)/
|
||||
<p>
|
||||
These two functions are best suited for scanning the whole directory for particular files. Note that
|
||||
the returned filehandles describe all file slots in the directory - even those with deleted files.
|
||||
The return value can be obtained by casting both sides to <tt/unsigned/ - as in the <tt/SetNextFree/
|
||||
function or read directly after a call to those two functions from <tt/r5/. The current sector number
|
||||
is in <tt/r1/ and the sector data itself is in <tt/diskBlkBuf/.
|
||||
Those two functions are best suited for scanning the whole directory for particular files. Note that
|
||||
the returned filehandles describe all file slots in the directory -- even those with deleted files.
|
||||
The return value is <tt/NULL/ if there are no more slots, or if there was a disk error. The
|
||||
<tt/_oserror/ variable is non-zero if it was a disk error (see <tt>geos/gdisk.h</tt>). The current
|
||||
directory track and sector numbers are in <tt/r1L/ and <tt/r1H/. The sector data itself is in
|
||||
<tt/diskBlkBuf/.
|
||||
|
||||
<sect3>FindFile
|
||||
<p>
|
||||
<tt/char FindFile (char *fName)/
|
||||
<p>
|
||||
This function scans the whole directory for the given filename. It returns either 0 (success) or 5
|
||||
(FILE_NOT_FOUND, defined in <tt/gdisk.h/) or any other fatal disk read error. After a successful
|
||||
<tt/FindFile/ you will have <tt/struct filehandle/ at <tt/dirEntryBuf/ filled with the file's data and
|
||||
other registers set as described in <tt/GetNxtDirEntry/.
|
||||
This function scans the whole directory for the given filename. It returns either 0 (success), 5
|
||||
(FILE_NOT_FOUND, defined in <tt>geos/gdisk.h</tt>), or any other fatal disk read error. After a successful
|
||||
<tt/FindFile()/, you will have <tt/struct filehandle/ at <tt/dirEntryBuf/ filled with the file's data, and
|
||||
other registers set as described in <tt/GetNxtDirEntry()/.
|
||||
|
||||
<sect3>FindFTypes
|
||||
<p>
|
||||
|
@ -987,7 +988,7 @@ a particular file.
|
|||
<p>
|
||||
In GEOS there can be only one file opened at a time. Upon opening a VLIR file some information
|
||||
about it is copied into memory. You can retrieve the records table at <tt/fileTrScTab/ (table of
|
||||
128 <tt/struct tr_se/) and from <tt/VLIRInfo/ (<tt/struct VLIR_info/.
|
||||
128 <tt/struct tr_se/) and from <tt/VLIRInfo/ (<tt/struct VLIR_info/).
|
||||
E.g. the size of whole VLIR file can be retrieved by reading <tt/VLIRInfo.fileSize/.
|
||||
|
||||
<sect3>OpenRecordFile
|
||||
|
|
|
@ -172,6 +172,9 @@
|
|||
<tag><htmlurl url="supervision.html" name="supervision.html"></tag>
|
||||
Topics specific to the Watara Supervision Console.
|
||||
|
||||
<tag><htmlurl url="sym1.html" name="sym1.html"></tag>
|
||||
Topics specific to the Synertek Systems Sym-1.
|
||||
|
||||
<tag><htmlurl url="telestrat.html" name="telestrat.html"></tag>
|
||||
Topics specific to the Oric Telestrat.
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
<url url="mailto:uz@cc65.org" name="Ullrich von Bassewitz">,<newline>
|
||||
<url url="mailto:cbmnut@hushmail.com" name="CbmNut">,<newline>
|
||||
<url url="mailto:greg.king5@verizon.net" name="Greg King">,<newline>
|
||||
<url url="mailto:groepaz@gmx.net" name="Groepaz">,<newline>
|
||||
<url url="mailto:stephan.muehlstrasser@web.de" name="Stephan Mühlstrasser">
|
||||
|
||||
<abstract>
|
||||
|
@ -458,12 +459,8 @@ Substitute the name of a Commodore computer for that <tt/<sys>/:
|
|||
Start the desired version of the emulator (CBM610 programs run on
|
||||
the CBM II [<tt/xcbm2/] emulator).
|
||||
|
||||
In the Windows versions of VICE, choose <bf>File>Autoboot disk/tape
|
||||
image...</bf>, choose your executable, and click <bf/OK/.
|
||||
|
||||
In the Unix versions, hold down the mouse's first button. Move the pointer to
|
||||
<bf>Smart-attach disk/tape...</bf>, and release the button. Choose your
|
||||
executable, and click <bf/Autostart/.
|
||||
Choose <bf>File>Autostart disk/tape image...</bf>, choose your executable,
|
||||
and click <bf/OK/.
|
||||
|
||||
The file has a 14-byte header which corresponds to a PRG-format BASIC program,
|
||||
consisting of a single line, similar to this:
|
||||
|
@ -499,6 +496,29 @@ The output will appear on a separate line, and you will be returned to a BASIC
|
|||
prompt.
|
||||
|
||||
|
||||
<sect1>Gamate<p>
|
||||
|
||||
Before you can run the cartridge image produced by the linker, the binary has to
|
||||
be patched using the <bf/gamate-fixcart/ tool that is included in the cc65
|
||||
package in the util/gamata directory.
|
||||
|
||||
<tscreen><verb>
|
||||
gamate-fixcart <image.bin>
|
||||
</verb></tscreen>
|
||||
|
||||
<sect2>MESS<p>
|
||||
Available at <url
|
||||
url="https://www.mamedev.org">:
|
||||
|
||||
MESS (Multiple Emulator Super System) is a multi system emulator that emulates
|
||||
various cc65 targets. It once started as a MAME fork, but was marged into MAME
|
||||
again at some point.
|
||||
|
||||
<tscreen><verb>
|
||||
mess gamate -debug -window -skip_gameinfo -cart <image.bin>
|
||||
</verb></tscreen>
|
||||
|
||||
|
||||
<sect1>GEOS<p>
|
||||
Available at <it/Click Here Software's/ <url
|
||||
url="http://cbmfiles.com/geos/index.html" name="GEOS download section">:
|
||||
|
@ -535,17 +555,8 @@ feature on.
|
|||
</quote>
|
||||
|
||||
<quote>
|
||||
VICE even has different ways that depend on which operating system is running
|
||||
the emulator.
|
||||
<itemize>
|
||||
<item>In Windows, you must click on <bf/Options/ (in an always visible menu).
|
||||
Then, you must click on <bf/True drive emulation/.
|
||||
<item>In Unix, you must <em/hold down/ the second button on your mouse. Move
|
||||
the pointer down to <bf/Drive settings/. Then, move the pointer over to
|
||||
<bf/Enable true drive emulation/. (If there is a check-mark in front of
|
||||
those words, that feature already is turned on -- then, move the pointer
|
||||
off of that menu.) Release the mouse button.
|
||||
</itemize>
|
||||
In VICE, got to <bf/Settings/ -> <bf/Settings/, then <bf/Peripherial devices/ ->
|
||||
<bf/Drive/. Then, you must enable the <bf/True drive emulation/ checkbox.
|
||||
</quote>
|
||||
|
||||
Find the <bf/CONVERT/ program on the boot disk [tap the 6-key; then, you
|
||||
|
@ -572,6 +583,29 @@ directory notePad. Look at the eight file-positions on each page until you see
|
|||
The output is shown in a GEOS dialog box; click <bf/OK/ when you have finished
|
||||
reading it.
|
||||
|
||||
Alternatively you can use the <bf/c1541/ program that comes with VICE to write the
|
||||
file to a disk image directly in GEOS format, so it can be used in GEOS directly
|
||||
without having to use the <bf/CONVERT/ program.
|
||||
|
||||
<tscreen><verb>
|
||||
c1541 -attach geos.d64 -geoswrite hello1
|
||||
</verb></tscreen>
|
||||
|
||||
|
||||
<sect1>Nintendo Entertainment System<p>
|
||||
|
||||
<sect2>Mednafen (NES)<p>
|
||||
Available at <url
|
||||
url="https://mednafen.github.io/releases/">:
|
||||
|
||||
Mednafen is a multi system emulator that emulates a couple of the supported
|
||||
targets of cc65: Apple II/II+, Atari Lynx, Nintendo Entertainment System and
|
||||
PC Engine/TurboGrafx 16.
|
||||
|
||||
<tscreen><verb>
|
||||
mednafen -force_module nes <image.bin>
|
||||
</verb></tscreen>
|
||||
|
||||
|
||||
<sect1>Ohio Scientific Challenger 1P<p>
|
||||
The <tt/osic1p/ runtime library returns to the boot prompt when the main()
|
||||
|
@ -694,6 +728,32 @@ Press <RETURN>.
|
|||
After hitting the RETURN key, you should see the boot prompt again.
|
||||
|
||||
|
||||
<sect1>PC Engine/TurboGrafx 16<p>
|
||||
|
||||
For the cartridge image produced by the linker to work in emulators and on real
|
||||
hardware, its content must be rearranged so the first 8k block becomes the last
|
||||
8k block in the image.
|
||||
|
||||
For example, for a 32k image this can be done using <bf/dd/ as follows:
|
||||
|
||||
<tscreen><verb>
|
||||
dd if=infile.bin bs=8K skip=3 > outfile.pce
|
||||
dd if=infile.bin bs=8K count=3 >> outfile.pce
|
||||
</verb></tscreen>
|
||||
|
||||
<sect2>Mednafen<p>
|
||||
Available at <url
|
||||
url="https://mednafen.github.io/releases/">:
|
||||
|
||||
Mednafen is a multi system emulator that emulates a couple of the supported
|
||||
targets of cc65: Apple II/II+, Atari Lynx, Nintendo Entertainment System and
|
||||
PC Engine/TurboGrafx 16.
|
||||
|
||||
<tscreen><verb>
|
||||
mednafen -force_module pce <image.pce>
|
||||
</verb></tscreen>
|
||||
|
||||
|
||||
<sect1>Contributions wanted<p>
|
||||
|
||||
We need your help! Recommended emulators and instructions for other targets
|
||||
|
|
|
@ -760,7 +760,7 @@ There's a library subroutine called <tt/copydata/ (in a module named
|
|||
look at it's inner workings before using it!
|
||||
|
||||
|
||||
<sect1>Other MEMORY area attributes<p>
|
||||
<sect1>Other MEMORY area attributes<label id="MEMORY"><p>
|
||||
|
||||
There are some other attributes not covered above. Before starting the
|
||||
reference section, I will discuss the remaining things here.
|
||||
|
@ -822,7 +822,6 @@ that has a segment reference (for example a symbol). The result of this
|
|||
function is the value of the bank attribute for the run memory area of the
|
||||
segment.
|
||||
|
||||
|
||||
<sect1>Other SEGMENT attributes<p>
|
||||
|
||||
Segments may be aligned to some memory boundary. Specify "<tt/align = num/" to
|
||||
|
@ -921,9 +920,8 @@ name="6502 binary relocation format specification">). It is defined like this:
|
|||
}
|
||||
</verb></tscreen>
|
||||
|
||||
The other format available is the Atari (xex) segmented file format, this is
|
||||
the standard format used by Atari DOS 2.0 and upward file managers in the Atari
|
||||
8-bit computers, and it is defined like this:
|
||||
The other format available is the Atari segmented file format (xex), this is
|
||||
the standard format used by Atari DOS 2.0 and upwards, and it is defined like this:
|
||||
|
||||
<tscreen><verb>
|
||||
FILES {
|
||||
|
@ -932,7 +930,8 @@ the standard format used by Atari DOS 2.0 and upward file managers in the Atari
|
|||
</verb></tscreen>
|
||||
|
||||
In the Atari segmented file format, the linker will write each <tt/MEMORY/ area
|
||||
as a new segment, including a header with the start and end address.
|
||||
as including a header with the start and end address. If two memory areas are
|
||||
contiguous, the headers will be joined if possible.
|
||||
|
||||
The necessary o65 or Atari attributes are defined in a special section labeled
|
||||
<ref id="FORMAT" name="FORMAT">.
|
||||
|
@ -1009,7 +1008,8 @@ The <tt/CONDES/ feature has several attributes:
|
|||
<tag><tt>segment</tt></tag>
|
||||
|
||||
This attribute tells the linker into which segment the table should be
|
||||
placed. If the segment does not exist, it is created.
|
||||
placed. If the segment does not exist in any object file, it is created
|
||||
in the final object code.
|
||||
|
||||
|
||||
<tag><tt>type</tt></tag>
|
||||
|
@ -1058,7 +1058,7 @@ The <tt/CONDES/ feature has several attributes:
|
|||
Without specifying the <tt/CONDES/ feature, the linker will not create any
|
||||
tables, even if there are <tt/condes/ entries in the object files.
|
||||
|
||||
For more information see the <tt/.CONDES/ command in the <url
|
||||
For more information, see the <tt/.CONDES/ command in the <url
|
||||
url="ca65.html" name="ca65 manual">.
|
||||
|
||||
|
||||
|
@ -1139,6 +1139,19 @@ The builtin config files do contain segments that have a special meaning for
|
|||
the compiler and the libraries that come with it. If you replace the builtin
|
||||
config files, you will need the following information.
|
||||
|
||||
<sect1>INIT<p>
|
||||
|
||||
The INIT segment is some kind of 'bss' segment since it contains
|
||||
uninitialized data. Unlike <tt>.bss</tt> itself, its contents aren't
|
||||
initialized to zero at program startup . It's mostly used by
|
||||
constructors in the startup code. An example for the use of the INIT
|
||||
segment is saving/restoring the zero page area used by cc65.
|
||||
|
||||
<sect1>LOWCODE<p>
|
||||
|
||||
For the LOWCODE segment, it is guaranteed that it won't be banked out, so it
|
||||
is reachable at any time by interrupt handlers or similar.
|
||||
|
||||
<sect1>ONCE<p>
|
||||
|
||||
The ONCE segment is used for initialization code run only once before
|
||||
|
@ -1146,11 +1159,6 @@ execution reaches main() - provided that the program runs in RAM. You
|
|||
may for example add the ONCE segment to the heap in really memory
|
||||
constrained systems.
|
||||
|
||||
<sect1>LOWCODE<p>
|
||||
|
||||
For the LOWCODE segment, it is guaranteed that it won't be banked out, so it
|
||||
is reachable at any time by interrupt handlers or similar.
|
||||
|
||||
<sect1>STARTUP<p>
|
||||
|
||||
This segment contains the startup code which initializes the C software stack
|
||||
|
|
|
@ -59,6 +59,9 @@ Functions that are <em/not/ available:
|
|||
Functions not available on all supported systems:
|
||||
|
||||
<itemize>
|
||||
<item><tt>clock</tt>: Support depends on the capabilities of the target
|
||||
machine.
|
||||
<p>
|
||||
<item><tt>fopen/fread/fwrite/fclose/fputs/fgets/fscanf</tt>: The functions
|
||||
are built on open/read/write/close. Those latter functions are not available
|
||||
on all systems.
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
<article>
|
||||
<title>PC-Engine (TurboGrafx 16) System-specific information for cc65
|
||||
<author><url url="mailto:groepaz@gmx.net" name="Groepaz/Hitmen">,<newline>
|
||||
<author><url url="mailto:groepaz@gmx.net" name="Groepaz">,<newline>
|
||||
<url url="mailto:greg.king5@verizon.net" name="Greg King">
|
||||
|
||||
<abstract>
|
||||
|
@ -206,11 +206,6 @@ following functions (and a few others):
|
|||
|
||||
<sect>Other hints<p>
|
||||
|
||||
<itemize>
|
||||
<item><url url="https://mednafen.github.io/" name= "Mednafen"> is a good
|
||||
emulator to use for the PC-Engine.
|
||||
</itemize>
|
||||
|
||||
Some useful resources on PCE coding:
|
||||
|
||||
<itemize>
|
||||
|
|
|
@ -105,6 +105,7 @@ declaration and usage.
|
|||
<item>cbm_save
|
||||
<item>cbm_write
|
||||
<item>get_tv
|
||||
<item>waitvsync
|
||||
</itemize>
|
||||
|
||||
|
||||
|
|
|
@ -195,10 +195,10 @@ No mouse drivers are currently available for the Plus/4.
|
|||
|
||||
<tag><tt/plus4-stdser.ser (plus4_stdser_ser)/</tag>
|
||||
Driver for the 6551 ACIA chip built into the Plus/4. Supports up to 19200
|
||||
baud, hardware flow control (RTS/CTS) and interrupt driven receives. Note
|
||||
that because of the peculiarities of the 6551 chip transmits are not
|
||||
interrupt driven, and the transceiver blocks if the receiver asserts flow
|
||||
control because of a full buffer.
|
||||
baud, requires hardware flow control (RTS/CTS) and does interrupt driven
|
||||
receives. Note that because of the peculiarities of the 6551 chip transmits
|
||||
are not interrupt driven, and the transceiver blocks if the receiver asserts
|
||||
flow control because of a full buffer.
|
||||
|
||||
You need an adapter to use the builtin port, since the output levels
|
||||
available at the user port don't follow the RS232 standard.
|
||||
|
|
|
@ -0,0 +1,132 @@
|
|||
<!doctype linuxdoc system>
|
||||
|
||||
<article>
|
||||
<title>Synertek Systems Sym-1 specific information for cc65
|
||||
<author><url url="mailto:wayne@parhamdata.com" name="Wayne Parham">
|
||||
|
||||
<abstract>
|
||||
An overview over the Sym-1 runtime system as it is implemented for the cc65 C compiler.
|
||||
</abstract>
|
||||
|
||||
<!-- Table of contents -->
|
||||
<toc>
|
||||
|
||||
<!-- Begin the document -->
|
||||
|
||||
<sect>Overview<p>
|
||||
|
||||
This file contains an overview of the Sym-1 runtime system as it comes with the cc65 C compiler. It describes the memory layout, Sym-1 specific header files, available drivers, and any pitfalls specific to the platform.
|
||||
|
||||
Please note that Sym-1 specific functions are just mentioned here, they are described in detail in the separate <url url="funcref.html" name="function reference">. Even functions marked as "platform dependent" may be available on more than one platform. Please see the function reference for more information.
|
||||
|
||||
<sect>Binary format<p>
|
||||
|
||||
The output format generated by the linker for the Sym-1 target is a raw binary BIN file, which is essentially a memory image. You can convert this to a HEX file using BIN2HEX, which is a popular open-source conversion utility program. A HEX file has ASCII representations of the hexadecimal byte values of the machine-language program. So the HEX file can be transferred to the Sym-1 using the RS-232 terminal port, just as if the machine-code was entered by hand. Enter 'm 200' in the monitor and start the HEX file transfer.
|
||||
|
||||
<p>
|
||||
|
||||
Included with this distribution is a 4k configuration file and a 32k config file. The Sym-1 on-board memory is limited to 4 kbytes but system memory can be increased to 32 kbytes of contiguous RAM with aftermarket add-on boards. So choose the config file that matches your system configuration before compiling and linking user programs.
|
||||
|
||||
<sect>Memory layout<p>
|
||||
|
||||
The ROMs and I/O areas are defined in the configuration files, as are most of the entry points for useful subroutines in the Sym-1 monitor ROM. cc65 generated programs compiled and linked using 4k config run in the memory range of $200 - $0FFF. The 32k config expands this range to $7FFF. The starting memory location and entry point for running the program is $200, so when the program is transferred to the Sym-1, it is executed by typing 'g 200'. The system returns control back to the monitor ROM when the program terminates, providing the '.' prompt.
|
||||
|
||||
Special locations:
|
||||
|
||||
<descrip>
|
||||
<tag/Text screen/
|
||||
Conio support is not currently available for the Sym-1. But stdio console functions are available.
|
||||
|
||||
<tag/Stack/
|
||||
The C runtime stack is located at $0FFF on 4KB Syms, or at $7FFFfor 32KB systems. The stack always grows downwards.
|
||||
|
||||
<tag/Heap/
|
||||
The C heap is located at the end of the program and grows towards the C runtime stack.
|
||||
|
||||
</descrip><p>
|
||||
|
||||
<sect>Platform specific header files<p>
|
||||
|
||||
Programs containing Sym-1 code may use the <tt/sym1.h/ header file. See the header file for more information.
|
||||
|
||||
<sect1>Hardware access<p>
|
||||
|
||||
The pseudo variables declared in the <tt/sym1.inc/ include file allow access to hardware located in the address space. See the include file for more information.
|
||||
|
||||
<sect>Loadable drivers<p>
|
||||
|
||||
<sect1>Graphics drivers<p>
|
||||
|
||||
No graphics drivers are currently available for the Sym-1.
|
||||
|
||||
<sect1>Extended memory drivers<p>
|
||||
|
||||
No extended memory drivers are currently available for the Sym-1.
|
||||
|
||||
<sect1>Joystick drivers<p>
|
||||
|
||||
No joystick driver is currently available for the Sym-1.
|
||||
|
||||
<sect1>Mouse drivers<p>
|
||||
|
||||
No mouse drivers are currently available for the Sym-1.
|
||||
|
||||
<sect1>RS232 device drivers<p>
|
||||
|
||||
No communication port drivers are currently available for the Sym-1. It has only the "master console" e.g. stdin and stdout.
|
||||
|
||||
<sect>Limitations<p>
|
||||
|
||||
<sect1>Disk I/O<p>
|
||||
|
||||
The existing library for the Sym-1 doesn't implement C file I/O.
|
||||
|
||||
To be more specific, this limitation means that you cannot use any of the following functions (and a few others):
|
||||
|
||||
<itemize>
|
||||
<item>fopen
|
||||
<item>fclose
|
||||
<item>fread
|
||||
<item>fwrite
|
||||
<item>...
|
||||
</itemize>
|
||||
|
||||
<sect>Other hints<p>
|
||||
|
||||
<sect1>sym1.h<p>
|
||||
This header exposes Sym-specific I/O functions that are useful for reading and writing its ports and front panel. See the <tt/sym1.h/ include file for a list of the functions available.
|
||||
|
||||
<sect2>Limited memory applications<p>
|
||||
|
||||
As stated earlier, there are config files for 4KB and 32KB systems. If you have 32KB RAM, then you will probably want to use the sym1-32k configuration, but if not - if you are using the sym1-4k configuration - then you may want to use functions like getchar, putchar, gets and puts rather than functions like scanf and printf. Printf, for example, requires about 1KB because it needs to know how to process all the format specifiers.
|
||||
|
||||
<sect3>Sample programs<p>
|
||||
|
||||
All the samples will run on the "stock" 4KB Sym-1, except for symIO and symNotepad, which require 32KB. These sample programs can be found in the targettest/sym1 directory:
|
||||
|
||||
<itemize>
|
||||
<item>symHello prints "Hello World!" and then inputs characters, which are echoed on the screen. It also makes a "beep" sound.</item>
|
||||
<item>symTiny does the same as symHello, but does it with puts() rather than printf() to show the difference in compiled binary size.</item>
|
||||
<item>symDisplay allows entry of a message, which is then displayed by scrolling it across the front panel display.</item>
|
||||
<item>symIO allows access to the Sym-1 digital I/O ports.</item>
|
||||
<item>symNotepad is a simple text entry/retrieval program that uses tape storage.</item>
|
||||
</itemize>
|
||||
|
||||
<sect>License<p>
|
||||
|
||||
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:
|
||||
|
||||
<enum>
|
||||
<item> 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.
|
||||
<item> Altered source versions must be plainly marked as such, and must not
|
||||
be misrepresented as being the original software.
|
||||
<item> This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
</enum>
|
||||
|
||||
</article>
|
|
@ -555,7 +555,7 @@ tgi_init(); //Set up the default palette and clear the screen.
|
|||
<descrip>
|
||||
<tag/Function/Install an already loaded driver and return an error code.
|
||||
<tag/Header/<tt/<ref id="tgi.h" name="tgi.h">/
|
||||
<tag/Declaration/<tt/unsigned char __fastcall__ tgi_install (void* driver);/
|
||||
<tag/Declaration/<tt/unsigned char __fastcall__ tgi_install (const void* driver);/
|
||||
<tag/Description/The function installs a driver that was already loaded into
|
||||
memory (or linked statically to the program). It returns an error code
|
||||
(<tt/TGI_ERR_OK/ in case of success).
|
||||
|
|
|
@ -75,7 +75,6 @@ common to all CBM platforms.
|
|||
There are currently no special VIC20 functions.
|
||||
|
||||
|
||||
|
||||
<sect1>CBM-specific functions<p>
|
||||
|
||||
Some functions are available for all (or at least most) of the Commodore
|
||||
|
@ -143,7 +142,33 @@ The names in the parentheses denote the symbols to be used for static linking of
|
|||
|
||||
<sect1>Graphics drivers<p>
|
||||
|
||||
No graphics drivers are currently available for the VIC20.
|
||||
<descrip>
|
||||
|
||||
<tag><tt/vic20-hi.tgi (vic20_hi_tgi)/</tag>
|
||||
This driver features a resolution of 160×192 with two colors. The
|
||||
background can be chosen from a sixteen-color palette. The foreground can
|
||||
be chosen from an eight-color palette.
|
||||
|
||||
The driver will use memory from addresses $1000 to $1FFF as a graphics
|
||||
buffer. Therefore, the VIC-20 must have, at least, 8K of expansion RAM.
|
||||
|
||||
Programs that use this driver must be linked by the <tt/vic20-tgi.cfg/
|
||||
configuration file. It will link a special header into the program.
|
||||
That header will do the housekeeping that's needed by TGI.
|
||||
|
||||
An example command line:
|
||||
<tscreen><verb>
|
||||
cl65 -D DYN_DRV=0 -t vic20 -C vic20-tgi.cfg samples/mandelbrot.c
|
||||
</verb></tscreen>
|
||||
|
||||
When the program starts, it will move itself up in RAM, to make room for the
|
||||
buffer. When the program finishes, it will reset the BASIC interpreter.
|
||||
That means that graphics pictures won't be preserved between the executions
|
||||
of programs. Also, the graphics buffer shares RAM with the text screen. If
|
||||
a picture must be saved, then a program must put it somewhere else (such as
|
||||
a disk file) before returning to the text mode.
|
||||
|
||||
</descrip>
|
||||
|
||||
|
||||
<sect1>Extended memory drivers<p>
|
||||
|
|
|
@ -0,0 +1,80 @@
|
|||
/*****************************************************************************/
|
||||
/* */
|
||||
/* _atari5200os.h */
|
||||
/* */
|
||||
/* Internal include file, do not use directly */
|
||||
/* */
|
||||
/* */
|
||||
/* 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. */
|
||||
/* */
|
||||
/*****************************************************************************/
|
||||
|
||||
#ifndef __ATARI5200OS_H
|
||||
#define __ATARI5200OS_H
|
||||
|
||||
|
||||
struct __os {
|
||||
|
||||
/*Page zero*/
|
||||
unsigned char pokmsk; // = $00 System mask for POKEY IRQ enable
|
||||
unsigned char rtclok[2]; // = $01,$02 Real time clock
|
||||
unsigned char critic; // = $03 Critical section flag
|
||||
unsigned char atract; // = $04 Attract mode counter
|
||||
|
||||
union {
|
||||
struct {
|
||||
unsigned char sdlstl; // = $05 Save display list LO
|
||||
unsigned char sdlsth; // = $06 Save display list HI
|
||||
};
|
||||
void* sdlst; // = $05,$06 Display list shadow
|
||||
};
|
||||
|
||||
unsigned char sdmctl; // = $07 DMACTL shadow
|
||||
unsigned char pcolr0; // = $08 PM color 0
|
||||
unsigned char pcolr1; // = $09 PM color 1
|
||||
unsigned char pcolr2; // = $0A PM color 2
|
||||
unsigned char pcolr3; // = $0B PM color 3
|
||||
unsigned char color0; // = $0C PF color 0
|
||||
unsigned char color1; // = $0D PF color 1
|
||||
unsigned char color2; // = $0E PF color 2
|
||||
unsigned char color3; // = $0F PF color 3
|
||||
unsigned char color4; // = $10 PF color 4
|
||||
unsigned char _free_1[0xEF]; // = $11-$FF User space
|
||||
|
||||
/*Stack*/
|
||||
unsigned char stack[0x100]; // = $100-$1FF Stack
|
||||
|
||||
/*Page 2 OS variables*/
|
||||
void (*vinter)(void); // = $200 Immediate IRQ vector
|
||||
void (*vvblki)(void); // = $202 Immediate VBI vector
|
||||
void (*vvblkd)(void); // = $204 Deferred VBI vector
|
||||
void (*vdslst)(void); // = $206 DLI vector
|
||||
void (*vkeybd)(void); // = $208 Keyboard IRQ vector
|
||||
void (*vkeypd)(void); // = $20A Keyboard continuation vector
|
||||
void (*vbrkky)(void); // = $20C Break key interrupt vector
|
||||
void (*vbreak)(void); // = $20E BRK instruction interrupt vector
|
||||
void (*vserin)(void); // = $210 Serial input ready vector
|
||||
void (*vseror)(void); // = $212 Serial output data needed vector
|
||||
void (*vseroc)(void); // = $214 Serial output completed vector
|
||||
void (*vtimr1)(void); // = $216 POKEY timer 1 IRQ vector
|
||||
void (*vtimr2)(void); // = $218 POKEY timer 2 IRQ vector
|
||||
void (*vtimr4)(void); // = $21A POKEY timer 4 IRQ vector
|
||||
|
||||
};
|
||||
|
||||
#endif
|
|
@ -7,7 +7,7 @@
|
|||
/* */
|
||||
/* */
|
||||
/* (C) 2003 Ullrich von Bassewitz */
|
||||
/* Römerstrasse 52 */
|
||||
/* Roemerstrasse 52 */
|
||||
/* D-70794 Filderstadt */
|
||||
/* EMail: uz@cc65.org */
|
||||
/* */
|
||||
|
|
|
@ -207,6 +207,8 @@ void rebootafterexit (void);
|
|||
#define _textcolor(color) COLOR_WHITE
|
||||
#define _bgcolor(color) COLOR_BLACK
|
||||
#define _bordercolor(color) COLOR_BLACK
|
||||
#define _cpeekcolor() COLOR_WHITE
|
||||
#define _cpeekrevers() 0
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -46,10 +46,14 @@ extern void __fastcall__ _afailed (const char*, unsigned);
|
|||
# define assert(expr) ((expr)? (void)0 : _afailed(__FILE__, __LINE__))
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/* End of assert.h */
|
||||
/* TODO: Guard with #if __CC65_STD__ >= __CC65_STD_C11__ if there
|
||||
** is a C11 mode.
|
||||
*/
|
||||
#if __CC65_STD__ > __CC65_STD_C99__
|
||||
# define static_assert _Static_assert
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/* End of assert.h */
|
||||
#endif
|
||||
|
|
|
@ -6,10 +6,11 @@
|
|||
/* */
|
||||
/* */
|
||||
/* */
|
||||
/* (C) 2000-2019 Mark Keates <markk@dendrite.co.uk> */
|
||||
/* (C) 2000-2021 Mark Keates <markk@dendrite.co.uk> */
|
||||
/* Freddy Offenga <taf_offenga@yahoo.com> */
|
||||
/* Christian Groessler <chris@groessler.org> */
|
||||
/* Bill Kendrick <nbs@sonic.net> */
|
||||
/* et al. */
|
||||
/* */
|
||||
/* */
|
||||
/* This software is provided 'as-is', without any expressed or implied */
|
||||
|
@ -209,7 +210,7 @@
|
|||
#define KEY_CLEAR (KEY_LESSTHAN | KEY_SHIFT)
|
||||
#define KEY_INSERT (KEY_GREATERTHAN | KEY_SHIFT)
|
||||
|
||||
#define KEY_UP (KEY_UNDERLINE | KEY_CTRL)
|
||||
#define KEY_UP (KEY_DASH | KEY_CTRL)
|
||||
#define KEY_DOWN (KEY_EQUALS | KEY_CTRL)
|
||||
#define KEY_LEFT (KEY_PLUS | KEY_CTRL)
|
||||
#define KEY_RIGHT (KEY_ASTERISK | KEY_CTRL)
|
||||
|
@ -219,7 +220,7 @@
|
|||
/* Color register functions */
|
||||
/*****************************************************************************/
|
||||
|
||||
extern void __fastcall__ _setcolor (unsigned char color_reg, unsigned char hue, unsigned char luminace);
|
||||
extern void __fastcall__ _setcolor (unsigned char color_reg, unsigned char hue, unsigned char luminance);
|
||||
extern void __fastcall__ _setcolor_low (unsigned char color_reg, unsigned char color_value);
|
||||
extern unsigned char __fastcall__ _getcolor (unsigned char color_reg);
|
||||
|
||||
|
@ -227,6 +228,7 @@ extern unsigned char __fastcall__ _getcolor (unsigned char color_reg);
|
|||
/* Other screen functions */
|
||||
/*****************************************************************************/
|
||||
|
||||
extern void waitvsync (void); /* wait for start of next frame */
|
||||
extern int __fastcall__ _graphics (unsigned char mode); /* mode value same as in BASIC */
|
||||
extern void __fastcall__ _scroll (signed char numlines);
|
||||
/* numlines > 0 scrolls up */
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
|
||||
|
||||
|
||||
/* Check for errors */
|
||||
/* check for errors */
|
||||
#if !defined(__ATARI5200__)
|
||||
# error This module may only be used when compiling for the Atari 5200!
|
||||
#endif
|
||||
|
@ -46,14 +46,14 @@
|
|||
/* the addresses of the static drivers */
|
||||
extern void atr5200std_joy[]; /* referred to by joy_static_stddrv[] */
|
||||
|
||||
/* Masks for joy_read */
|
||||
/* masks for joy_read */
|
||||
#define JOY_UP_MASK 0x01
|
||||
#define JOY_DOWN_MASK 0x02
|
||||
#define JOY_LEFT_MASK 0x04
|
||||
#define JOY_RIGHT_MASK 0x08
|
||||
#define JOY_BTN_1_MASK 0x10
|
||||
|
||||
/* Character codes */
|
||||
/* character codes */
|
||||
#define CH_ULCORNER 0x0B /* '+' sign */
|
||||
#define CH_URCORNER 0x0B
|
||||
#define CH_LLCORNER 0x0B
|
||||
|
@ -65,7 +65,11 @@ extern void atr5200std_joy[]; /* referred to by joy_static_stddrv[] */
|
|||
#define AT_NTSC 0
|
||||
#define AT_PAL 1
|
||||
|
||||
/* Define hardware */
|
||||
/* Define variables used by the OS*/
|
||||
#include <_atari5200os.h>
|
||||
#define OS (*(struct __os*)0x0000)
|
||||
|
||||
/* define hardware */
|
||||
#include <_gtia.h>
|
||||
#define GTIA_READ (*(struct __gtia_read*)0xC000)
|
||||
#define GTIA_WRITE (*(struct __gtia_write*)0xC000)
|
||||
|
@ -89,5 +93,8 @@ extern void atr5200std_joy[]; /* referred to by joy_static_stddrv[] */
|
|||
*/
|
||||
#define _bordercolor(color) 0
|
||||
|
||||
/* End of atari5200.h */
|
||||
/* wait for start of next frame */
|
||||
extern void waitvsync (void);
|
||||
|
||||
/* end of atari5200.h */
|
||||
#endif
|
||||
|
|
|
@ -166,7 +166,7 @@ unsigned char get_tv (void);
|
|||
unsigned char __fastcall__ kbrepeat (unsigned char mode);
|
||||
/* Changes which keys have automatic repeat. */
|
||||
|
||||
#if !defined(__CBM610__) && !defined(__PET__)
|
||||
#if !defined(__CBM610__)
|
||||
void waitvsync (void);
|
||||
/* Wait for the start of the next video field. */
|
||||
#endif
|
||||
|
@ -191,6 +191,8 @@ unsigned char cbm_k_acptr (void);
|
|||
unsigned char cbm_k_basin (void);
|
||||
void __fastcall__ cbm_k_bsout (unsigned char C);
|
||||
unsigned char __fastcall__ cbm_k_chkin (unsigned char FN);
|
||||
unsigned char cbm_k_chrin (void);
|
||||
void __fastcall__ cbm_k_chrout (unsigned char C);
|
||||
void __fastcall__ cbm_k_ciout (unsigned char C);
|
||||
unsigned char __fastcall__ cbm_k_ckout (unsigned char FN);
|
||||
void cbm_k_clall (void);
|
||||
|
@ -295,7 +297,15 @@ unsigned char __fastcall__ cbm_readdir (unsigned char lfn,
|
|||
/* Reads one directory line into cbm_dirent structure.
|
||||
** Returns 0 if reading directory-line was successful.
|
||||
** Returns non-zero if reading directory failed, or no more file-names to read.
|
||||
** Returns 2 on last line. Then, l_dirent->size = the number of "blocks free."
|
||||
** Returns 2 on last line. Then, l_dirent->size = the number of "blocks free",
|
||||
** "blocks used", or "mb free". Return codes:
|
||||
** 0 = read file-name
|
||||
** 1 = couldn't read directory
|
||||
** 2 = read "blocks free", "blocks used", or "mb free"
|
||||
** 3 = couldn't find start of file-name
|
||||
** 4 = couldn't find end of file-name
|
||||
** 5 = couldn't read file-type
|
||||
** 6 = premature end of file
|
||||
*/
|
||||
|
||||
void __fastcall__ cbm_closedir (unsigned char lfn);
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
/* */
|
||||
/* */
|
||||
/* (C) 1998-2003 Ullrich von Bassewitz */
|
||||
/* Römerstrasse 52 */
|
||||
/* Roemerstrasse 52 */
|
||||
/* D-70794 Filderstadt */
|
||||
/* EMail: uz@cc65.org */
|
||||
/* */
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
/* from ASCII to screen-code mapping, so you can write directly */
|
||||
/* to the screen memory. */
|
||||
/* */
|
||||
/* If this include is used, no additional macroes are needed. */
|
||||
/* If this include is used, no additional macros are needed. */
|
||||
/* */
|
||||
/*****************************************************************************/
|
||||
|
||||
|
|
|
@ -201,16 +201,19 @@ void __fastcall__ cputhex16 (unsigned val);
|
|||
*/
|
||||
|
||||
#ifdef _textcolor
|
||||
# define textcolor(x) _textcolor(x)
|
||||
# define textcolor(color) _textcolor(color)
|
||||
#endif
|
||||
#ifdef _bgcolor
|
||||
# define bgcolor(x) _bgcolor(x)
|
||||
# define bgcolor(color) _bgcolor(color)
|
||||
#endif
|
||||
#ifdef _bordercolor
|
||||
# define bordercolor(x) _bordercolor(x)
|
||||
# define bordercolor(color) _bordercolor(color)
|
||||
#endif
|
||||
#ifdef _cpeekcolor
|
||||
# define cpeekcolor(x) _cpeekcolor(x)
|
||||
# define cpeekcolor() _cpeekcolor()
|
||||
#endif
|
||||
#ifdef _cpeekrevers
|
||||
# define cpeekrevers() _cpeekrevers()
|
||||
#endif
|
||||
|
||||
|
||||
|
|
|
@ -70,9 +70,9 @@
|
|||
#define COLOR_WHITE 15
|
||||
|
||||
/* Protos */
|
||||
void __fastcall__ psg_outb(unsigned char b);
|
||||
void __fastcall__ psg_delay(unsigned char b);
|
||||
void psg_silence(void);
|
||||
void __fastcall__ bios_playsound(void *a, unsigned char b);
|
||||
void __fastcall__ psg_outb (unsigned char b);
|
||||
void __fastcall__ psg_delay (unsigned char b);
|
||||
void psg_silence (void);
|
||||
void __fastcall__ bios_playsound (const void *a, unsigned char b);
|
||||
|
||||
#endif /* #ifndef _CVISION_H */
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
/* cx16.h */
|
||||
/* */
|
||||
/* CX16 system-specific definitions */
|
||||
/* For prerelease 37 */
|
||||
/* For prerelease 38 */
|
||||
/* */
|
||||
/* */
|
||||
/* This software is provided "as-is", without any expressed or implied */
|
||||
|
@ -111,6 +111,25 @@
|
|||
#define COLOR_LIGHTBLUE 0x0E
|
||||
#define COLOR_GRAY3 0x0F
|
||||
|
||||
/* TGI color defines */
|
||||
#define TGI_COLOR_BLACK COLOR_BLACK
|
||||
#define TGI_COLOR_WHITE COLOR_WHITE
|
||||
#define TGI_COLOR_RED COLOR_RED
|
||||
#define TGI_COLOR_CYAN COLOR_CYAN
|
||||
#define TGI_COLOR_VIOLET COLOR_VIOLET
|
||||
#define TGI_COLOR_PURPLE COLOR_PURPLE
|
||||
#define TGI_COLOR_GREEN COLOR_GREEN
|
||||
#define TGI_COLOR_BLUE COLOR_BLUE
|
||||
#define TGI_COLOR_YELLOW COLOR_YELLOW
|
||||
#define TGI_COLOR_ORANGE COLOR_ORANGE
|
||||
#define TGI_COLOR_BROWN COLOR_BROWN
|
||||
#define TGI_COLOR_LIGHTRED COLOR_LIGHTRED
|
||||
#define TGI_COLOR_GRAY1 COLOR_GRAY1
|
||||
#define TGI_COLOR_GRAY2 COLOR_GRAY2
|
||||
#define TGI_COLOR_LIGHTGREEN COLOR_LIGHTGREEN
|
||||
#define TGI_COLOR_LIGHTBLUE COLOR_LIGHTBLUE
|
||||
#define TGI_COLOR_GRAY3 COLOR_GRAY3
|
||||
|
||||
/* NES controller masks for joy_read() */
|
||||
|
||||
#define JOY_BTN_1_MASK 0x80
|
||||
|
@ -259,29 +278,35 @@ struct __vera {
|
|||
#define VIA1 (*(volatile struct __6522 *)0x9F60)
|
||||
#define VIA2 (*(volatile struct __6522 *)0x9F70)
|
||||
|
||||
#define RAM_BANK (VIA1.pra)
|
||||
#define ROM_BANK (VIA1.prb)
|
||||
|
||||
/* A structure with the x16emu's settings registers */
|
||||
struct __emul {
|
||||
unsigned char debug; /* Boolean: debugging enabled */
|
||||
unsigned char vera_action; /* Boolean: displaying VERA activity */
|
||||
unsigned char keyboard; /* Boolean: displaying typed keys */
|
||||
unsigned char echo; /* How Kernal output should be echoed to host */
|
||||
unsigned char save_on_exit; /* Boolean: save SD card when quitting */
|
||||
unsigned char echo; /* How to send Kernal output to host */
|
||||
unsigned char save_on_exit; /* Boolean: save machine state on exit */
|
||||
unsigned char gif_method; /* How GIF movie is being recorded */
|
||||
unsigned char unused[0xD - 0x6];
|
||||
unsigned char keymap; /* Keyboard layout number */
|
||||
const char detect[2]; /* "16" if running on x16emu */
|
||||
unsigned char const unused1[2];
|
||||
unsigned long const cycle_count; /* Running total of CPU cycles (8 MHz.) */
|
||||
unsigned char const unused2[1];
|
||||
unsigned char const keymap; /* Keyboard layout number */
|
||||
char const detect[2]; /* "16" if running on x16emu */
|
||||
};
|
||||
#define EMULATOR (*(volatile struct __emul)0x9FB0)
|
||||
#define EMULATOR (*(volatile struct __emul *)0x9FB0)
|
||||
|
||||
/* An array window into the half Mebibyte or two Mebibytes of banked RAM */
|
||||
#define BANK_RAM ((unsigned char[0x2000])0xA000)
|
||||
#define BANK_RAM ((unsigned char *)0xA000)
|
||||
|
||||
|
||||
|
||||
/* The addresses of the static drivers */
|
||||
|
||||
extern void cx16_std_joy[]; /* Referred to by joy_static_stddrv[] */
|
||||
extern void cx16_std_mou[]; /* Referred to by mouse_static_stddrv[] */
|
||||
extern void cx16_std_joy[]; /* Referenced by joy_static_stddrv[] */
|
||||
extern void cx16_std_mou[]; /* Referenced by mouse_static_stddrv[] */
|
||||
extern void cx320p1_tgi[]; /* Referenced by tgi_static_stddrv[] */
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -82,7 +82,7 @@ unsigned char __fastcall__ em_load_driver (const char* driver);
|
|||
unsigned char em_unload (void);
|
||||
/* Uninstall, then unload the currently loaded driver. */
|
||||
|
||||
unsigned char __fastcall__ em_install (void* driver);
|
||||
unsigned char __fastcall__ em_install (const void* driver);
|
||||
/* Install an already loaded driver. Return an error code. */
|
||||
|
||||
unsigned char em_uninstall (void);
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
/* */
|
||||
/* */
|
||||
/* (C) 1998-2004 Ullrich von Bassewitz */
|
||||
/* Römerstraße 52 */
|
||||
/* Roemerstrasse 52 */
|
||||
/* D-70794 Filderstadt */
|
||||
/* EMail: uz@cc65.org */
|
||||
/* */
|
||||
|
|
|
@ -170,6 +170,8 @@
|
|||
/* No support for dynamically loadable drivers */
|
||||
#define DYN_DRV 0
|
||||
|
||||
#define JOY_DATA 0x4400 /* hw register to read the pad bits from */
|
||||
|
||||
/* Masks for joy_read */
|
||||
#define JOY_UP_MASK 0x01
|
||||
#define JOY_DOWN_MASK 0x02
|
||||
|
|
|
@ -43,7 +43,7 @@ void __fastcall__ BitOtherClip(void *proc1, void *proc2, char skipl,
|
|||
char skipr, unsigned skiptop,
|
||||
struct iconpic *myIcon);
|
||||
|
||||
void __fastcall__ GraphicsString(char *myGfxString);
|
||||
void __fastcall__ GraphicsString(const void *myGfxString);
|
||||
|
||||
#ifdef __GEOS_CBM__
|
||||
void SetNewMode(void);
|
||||
|
|
|
@ -126,8 +126,8 @@ struct VLIR_info { /* VLIR information */
|
|||
};
|
||||
|
||||
struct process { /* process info, declare table of that type */
|
||||
unsigned pointer; /* (like: struct process proctab[2]=... */
|
||||
unsigned jiffies; /* last entry HAVE TO BE {0,0} */
|
||||
unsigned pointer; /* (like: struct process proctab[2]= ... */
|
||||
unsigned jiffies; /* last entry MUST BE {0,0} */
|
||||
};
|
||||
|
||||
struct iconpic { /* icon/encoded bitmap description */
|
||||
|
@ -135,7 +135,7 @@ struct iconpic { /* icon/encoded bitmap description */
|
|||
char x; /* position in cards (*8 pixels) */
|
||||
char y;
|
||||
char width; /* in cards */
|
||||
char heigth; /* in lines (pixels) */
|
||||
char height; /* in lines (pixels) */
|
||||
};
|
||||
|
||||
struct icondef { /* icon definition for DoIcons */
|
||||
|
@ -143,7 +143,7 @@ struct icondef { /* icon definition for DoIcons */
|
|||
char x; /* position in cards (*8 pixels) */
|
||||
char y;
|
||||
char width; /* of icon (in cards) */
|
||||
char heigth; /* of icon in lines (pixels) */
|
||||
char height; /* of icon in lines (pixels) */
|
||||
unsigned proc_ptr; /* pointer to function handling that icon */
|
||||
};
|
||||
|
||||
|
|
|
@ -89,7 +89,7 @@ unsigned char __fastcall__ joy_load_driver (const char* driver);
|
|||
unsigned char joy_unload (void);
|
||||
/* Uninstall, then unload the currently loaded driver. */
|
||||
|
||||
unsigned char __fastcall__ joy_install (void* driver);
|
||||
unsigned char __fastcall__ joy_install (const void* driver);
|
||||
/* Install an already loaded driver. Return an error code. */
|
||||
|
||||
unsigned char joy_uninstall (void);
|
||||
|
|
|
@ -63,6 +63,20 @@
|
|||
|
||||
#define ULONG_MAX 4294967295UL
|
||||
|
||||
/* These defines that are platform dependent */
|
||||
#if defined(__APPLE2__)
|
||||
# define PATH_MAX (64+1)
|
||||
#elif defined(__ATARI__)
|
||||
# define PATH_MAX (63+1)
|
||||
#elif defined(__CBM__)
|
||||
# define PATH_MAX (255) /* should be 256+1, see libsrc/common/_cmd.s why it's not */
|
||||
#elif defined(__LUNIX__)
|
||||
# define PATH_MAX (80+1)
|
||||
#elif defined(__TELESTRAT__)
|
||||
# define PATH_MAX (50+1)
|
||||
#else
|
||||
# define PATH_MAX (16+1)
|
||||
#endif
|
||||
|
||||
|
||||
/* End of limits.h */
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
/* */
|
||||
/* */
|
||||
/* (C) 1998-2005 Ullrich von Bassewitz */
|
||||
/* Römerstrasse 52 */
|
||||
/* Roemerstrasse 52 */
|
||||
/* D-70794 Filderstadt */
|
||||
/* EMail: uz@cc65.org */
|
||||
/* */
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
/* */
|
||||
/* */
|
||||
/* (C) 2003-2006, Ullrich von Bassewitz */
|
||||
/* Römerstraße 52 */
|
||||
/* Roemerstrasse 52 */
|
||||
/* D-70794 Filderstadt */
|
||||
/* EMail: uz@cc65.org */
|
||||
/* */
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
/* */
|
||||
/* */
|
||||
/* (C) 2003 Ullrich von Bassewitz */
|
||||
/* Römerstrasse 52 */
|
||||
/* Roemerstrasse 52 */
|
||||
/* D-70794 Filderstadt */
|
||||
/* EMail: uz@cc65.org */
|
||||
/* */
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
/* */
|
||||
/* */
|
||||
/* (C) 1998-2006, Ullrich von Bassewitz */
|
||||
/* Römerstrasse 52 */
|
||||
/* Roemerstrasse 52 */
|
||||
/* D-70794 Filderstadt */
|
||||
/* EMail: uz@cc65.org */
|
||||
/* */
|
||||
|
|
|
@ -136,7 +136,7 @@ unsigned char __fastcall__ ser_load_driver (const char* driver);
|
|||
unsigned char ser_unload (void);
|
||||
/* Uninstall, then unload the currently loaded driver. */
|
||||
|
||||
unsigned char __fastcall__ ser_install (void* driver);
|
||||
unsigned char __fastcall__ ser_install (const void* driver);
|
||||
/* Install an already loaded driver. Return an error code. */
|
||||
|
||||
unsigned char ser_uninstall (void);
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue