Created a target and a library for the Commander X16 prototype computer.
This commit is contained in:
316
asminc/cx16.inc
Normal file
316
asminc/cx16.inc
Normal file
@@ -0,0 +1,316 @@
|
||||
;
|
||||
; CX16 definitions
|
||||
;
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; Constants
|
||||
|
||||
.enum COLOR
|
||||
BLACK = $00
|
||||
WHITE
|
||||
RED
|
||||
CYAN
|
||||
VIOLET
|
||||
PURPLE = VIOLET
|
||||
GREEN
|
||||
BLUE
|
||||
YELLOW
|
||||
ORANGE
|
||||
BROWN
|
||||
LIGHTRED
|
||||
GRAY1
|
||||
GRAY2
|
||||
LIGHTGREEN
|
||||
LIGHTBLUE
|
||||
GRAY3
|
||||
.endenum
|
||||
|
||||
; Special keys
|
||||
.enum KEY
|
||||
F1 = $85
|
||||
F3
|
||||
F5
|
||||
F7
|
||||
F2
|
||||
F4
|
||||
F6
|
||||
F8
|
||||
F9 = $10
|
||||
F10 = $15
|
||||
F11
|
||||
F12
|
||||
.endenum
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; Zero page
|
||||
|
||||
; BASIC
|
||||
VARTAB := $2D ; Pointer to start of BASIC variables
|
||||
MEMSIZE := $37 ; Pointer to highest BASIC RAM location (+1)
|
||||
TXTPTR := $7A ; Pointer into BASIC source code
|
||||
|
||||
; Kernal
|
||||
IN_DEV := $99 ; Current input device number
|
||||
OUT_DEV := $9A ; Current output device number
|
||||
IMPARM := $9B ; Pointer for PRIMM function
|
||||
TIME := $A0 ; 60 Hz. clock
|
||||
FNAM_LEN := $B7 ; Length of filename
|
||||
SECADR := $B9 ; Secondary address
|
||||
DEVNUM := $BA ; Device number
|
||||
FNAM := $BB ; Pointer to filename
|
||||
KEY_COUNT := $C6 ; Number of keys in input buffer
|
||||
RVS := $C7 ; Reverse flag
|
||||
CURS_FLAG := $CC ; 1 = cursor off
|
||||
CURS_BLINK := $CD ; Blink counter
|
||||
CURS_CHAR := $CE ; Character under the cursor
|
||||
CURS_STATE := $CF ; Cursor blink state
|
||||
SCREEN_PTR := $D1 ; Pointer to current row on text screen (16 bits)
|
||||
CURS_X := $D3 ; Cursor column
|
||||
CURS_Y := $D6 ; Cursor row
|
||||
LLEN := $D9 ; Line length
|
||||
NLINES := $DA ; Number of screen lines
|
||||
JOY1 := $EF ; 3 bytes of NES/SNES gamepad data
|
||||
JOY2 := $F2
|
||||
FREKZP := $FB ; Five unused bytes
|
||||
|
||||
; Page two
|
||||
|
||||
BASIC_BUF := $200 ; Location of command-line
|
||||
BASIC_BUF_LEN = 89 ; Maximum length of command-line
|
||||
|
||||
CHARCOLOR := $286
|
||||
CURS_COLOR := $287 ; Color under the cursor
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; Vector and other locations
|
||||
|
||||
IRQVec := $0314
|
||||
BRKVec := $0316
|
||||
NMIVec := $0318
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; I/O locations
|
||||
|
||||
; Video Enhanced Retro Adapter
|
||||
; Has audio, SPI, and UART.
|
||||
.scope VERA
|
||||
; External registers
|
||||
.struct
|
||||
.org $9F20
|
||||
ADDR .faraddr ; Address for data port access
|
||||
DATA0 .byte ; First data port
|
||||
DATA1 .byte ; Second data port
|
||||
CTRL .byte ; Control register
|
||||
IRQ_EN .byte ; Interrupt enable bits
|
||||
IRQ_FLAGS .byte ; Interrupt flags
|
||||
.endstruct
|
||||
.enum ; Address automatic increment amounts
|
||||
INC0 = 0 << 4
|
||||
INC1 = 1 << 4
|
||||
INC2 = 2 << 4
|
||||
INC4 = 3 << 4
|
||||
INC8 = 4 << 4
|
||||
INC16 = 5 << 4
|
||||
INC32 = 6 << 4
|
||||
INC64 = 7 << 4
|
||||
INC128 = 8 << 4
|
||||
INC256 = 9 << 4
|
||||
INC512 = 10 << 4
|
||||
INC1024 = 11 << 4
|
||||
INC2048 = 12 << 4
|
||||
INC4096 = 13 << 4
|
||||
INC8192 = 14 << 4
|
||||
INC16384 = 15 << 4
|
||||
.endenum
|
||||
; Internal RAM and registers
|
||||
VRAM := $000000
|
||||
.scope COMPOSER ; Display composer
|
||||
.struct
|
||||
.org $0F0000
|
||||
VIDEO .byte
|
||||
HSCALE .byte
|
||||
VSCALE .byte
|
||||
FRAME .byte
|
||||
HSTART_LO .byte
|
||||
HSTOP_LO .byte
|
||||
VSTART_LO .byte
|
||||
VSTOP_LO .byte
|
||||
STRTSTOP_HI .byte
|
||||
IRQ_LINE .word
|
||||
.endstruct
|
||||
.enum MODE ; Output mode
|
||||
DISABLE = 0
|
||||
VGA
|
||||
NTSC
|
||||
RGB ; Interlaced, composite sync
|
||||
.endenum
|
||||
.enum
|
||||
ENABLE_COLOR = 0 << 2
|
||||
DISABLE_COLOR = 1 << 2 ; NTSC monochrome
|
||||
.endenum
|
||||
.endscope
|
||||
PALETTE := $0F1000
|
||||
.struct L0 ; Layer 0 registers
|
||||
.org $0F2000
|
||||
CTRL0 .byte ; Display mode control
|
||||
CTRL1 .byte ; Geometry control
|
||||
MAP_BASE .addr
|
||||
TILE_BASE .addr
|
||||
HSCROLL .word ; Horizontal scroll
|
||||
VSCROLL .word ; Vertical scroll
|
||||
.endstruct
|
||||
.struct L1 ; Layer 1 registers (same as layer 0)
|
||||
.org $0F3000
|
||||
CTRL0 .byte
|
||||
CTRL1 .byte
|
||||
MAP_BASE .addr
|
||||
TILE_BASE .addr
|
||||
HSCROLL .word
|
||||
VSCROLL .word
|
||||
.endstruct
|
||||
.enum MAP ; Map geometry
|
||||
WIDTH32 = 0
|
||||
WIDTH64
|
||||
WIDTH128
|
||||
WIDTH256
|
||||
HEIGHT32 = 0 << 2
|
||||
HEIGHT64 = 1 << 2
|
||||
HEIGHT128 = 2 << 2
|
||||
HEIGHT256 = 3 << 2
|
||||
.endenum
|
||||
.scope TILE ; Tile geometry
|
||||
.enum
|
||||
WIDTH8 = 0 << 4
|
||||
WIDTH16 = 1 << 4
|
||||
WIDTH320 = WIDTH8
|
||||
WIDTH640 = WIDTH16
|
||||
HEIGHT8 = 0 << 5
|
||||
HEIGHT16 = 1 << 5
|
||||
.endenum
|
||||
.enum FLIP
|
||||
NONE = 0 << 2
|
||||
HORIZ = 1 << 2
|
||||
VERT = 2 << 2
|
||||
BOTH = 3 << 2
|
||||
.endenum
|
||||
.endscope
|
||||
.enum DMODE ; Display modes
|
||||
TEXT16 = 0 << 5
|
||||
TEXT256 = 1 << 5
|
||||
TILE4 = 2 << 5
|
||||
TILE16 = 3 << 5
|
||||
TILE256 = 4 << 5
|
||||
BITMAP4 = 5 << 5
|
||||
BITMAP16 = 6 << 5
|
||||
BITMAP256 = 7 << 5
|
||||
.endenum
|
||||
.scope SPRITE
|
||||
.struct
|
||||
.org $0F4000
|
||||
CTRL .byte ; Enables sprites
|
||||
COLLISION .byte
|
||||
.endstruct
|
||||
.enum FLIP
|
||||
NONE = 0
|
||||
HORIZ
|
||||
VERT
|
||||
BOTH
|
||||
.endenum
|
||||
.enum ; Sprite geometry
|
||||
WIDTH8 = 0 << 4
|
||||
WIDTH16 = 1 << 4
|
||||
WIDTH32 = 2 << 4
|
||||
WIDTH64 = 3 << 4
|
||||
HEIGHT8 = 0 << 6
|
||||
HEIGHT16 = 1 << 6
|
||||
HEIGHT32 = 2 << 6
|
||||
HEIGHT64 = 3 << 6
|
||||
COLORS16 = 0 << 7
|
||||
COLORS256 = 1 << 7
|
||||
.endenum
|
||||
.enum DEPTH
|
||||
DISABLE = 0 << 2
|
||||
CANVAS = 1 << 2
|
||||
LAYER0 = 2 << 2
|
||||
LAYER1 = 3 << 2
|
||||
.endenum
|
||||
ATTRIB := $0F5000 ; Sprite attributes
|
||||
.endscope
|
||||
AUDIO := $0F6000
|
||||
.scope SPI
|
||||
.struct
|
||||
.org $0F7000
|
||||
DATA .byte
|
||||
CONTROL .byte
|
||||
.endstruct
|
||||
.enum
|
||||
DESELECT = 0
|
||||
SELECT
|
||||
BUSY_MASK = 1 << 1
|
||||
.endenum
|
||||
.endscope
|
||||
.scope UART ; Universal Asyncronous Receiver Transmitter
|
||||
.struct
|
||||
.org $0F8000
|
||||
DATA .byte
|
||||
STATUS .byte
|
||||
BPS_DIV .word
|
||||
.endstruct
|
||||
.enum MASK
|
||||
RECEIVE = 1 << 0
|
||||
TRANSMIT = 1 << 1
|
||||
.endenum
|
||||
.endscope
|
||||
.endscope
|
||||
|
||||
; 65c22
|
||||
.struct VIA1 ; Versatile Interface Adapter
|
||||
.org $9F60
|
||||
PRB .byte ; ROM bank, IEC (Port Register B)
|
||||
PRA .byte ; RAM bank (Port Register A)
|
||||
DDRB .byte ; (Data Direction Register B)
|
||||
DDRA .byte ; (Data Direction Register A)
|
||||
T1 .word ; (Timer 1)
|
||||
T1L .word ; (Timer 1 Latch)
|
||||
T2 .word ; (Timer 2)
|
||||
SR .byte ; (Shift Register)
|
||||
ACR .byte ; (Auxiliary Control Register)
|
||||
PCR .byte ; (Peripheral Control Register)
|
||||
IFR .byte ; (Interrupt Flags Register)
|
||||
IER .byte ; (Interrupt Enable Register)
|
||||
PRA2 .byte ; RAM bank (Port Register A without handshaking)
|
||||
.endstruct
|
||||
|
||||
; 65c22
|
||||
.struct VIA2
|
||||
.org $9F70
|
||||
PRB .byte
|
||||
PRA .byte ; NES controller communication
|
||||
DDRB .byte
|
||||
DDRA .byte
|
||||
T1 .word
|
||||
T1L .word
|
||||
T2 .word
|
||||
SR .byte
|
||||
ACR .byte
|
||||
PCR .byte
|
||||
IFR .byte
|
||||
IER .byte
|
||||
PRA2 .byte
|
||||
.endstruct
|
||||
|
||||
; Real-Time Clock
|
||||
|
||||
; X16 Emulator device
|
||||
; This device doesn't exist on the real machine.
|
||||
.struct EMULATOR
|
||||
.org $9FB0
|
||||
DEBUG .byte ; Boolean: debugging enabled
|
||||
VIDACCESSLOG .byte ; Boolean: log VERA activity
|
||||
KEYBOARDLOG .byte ; Boolean: log keyboard data
|
||||
ECHO .byte ; Boolean: echo enabled
|
||||
SAVEXIT .byte ; Boolean: save on exit
|
||||
.res $D - $5
|
||||
KEYMAP .byte ; Current keyboard layout number
|
||||
DETECT .byte 2 ; If is "16" string, then running on emulator
|
||||
.endstruct
|
||||
Reference in New Issue
Block a user