1 ;*****************************************************************************/
5 ;* Definitions for the o65 file format */
9 ;* (C) 2002 Ullrich von Bassewitz */
11 ;* D-70597 Stuttgart */
12 ;* EMail: uz@musoftware.de */
15 ;* This software is provided 'as-is', without any expressed or implied */
16 ;* warranty. In no event will the authors be held liable for any damages */
17 ;* arising from the use of this software. */
19 ;* Permission is granted to anyone to use this software for any purpose, */
20 ;* including commercial applications, and to alter it and redistribute it */
21 ;* freely, subject to the following restrictions: */
23 ;* 1. The origin of this software must not be misrepresented; you must not */
24 ;* claim that you wrote the original software. If you use this software */
25 ;* in a product, an acknowledgment in the product documentation would be */
26 ;* appreciated but is not required. */
27 ;* 2. Altered source versions must be plainly marked as such, and must not */
28 ;* be misrepresented as being the original software. */
29 ;* 3. This notice may not be removed or altered from any source */
32 ;*****************************************************************************/
36 ; This files exports structures and constants to handle the o65 relocatable
37 ; file format as defined by Andre Fachat.
41 ; The o65 header structure (6502 format)
43 MARKER .byte 2 ; Non-C64 marker: $01 $00
44 MAGIC .byte 3 ; o65 magic: "o65"
45 VERSION .byte 1 ; Version number
46 MODE .word ; Mode word
47 TBASE .word ; Original text (code) segment address
48 TLEN .word ; Size of text (code) segment
49 DBASE .word ; Original data segment address
50 DLEN .word ; Size of data segment
51 BBASE .word ; Original bss segment address
52 BLEN .word ; Size of bss segment
53 ZBASE .word ; Original zp segment address
54 ZLEN .word ; Size of zp segment
55 STACK .word ; Stacksize needed
58 ; Marker, magic and version number
61 O65_MAGIC_0 = $6F ; 'o'
62 O65_MAGIC_1 = $36 ; '6'
63 O65_MAGIC_2 = $35 ; '5'
66 ; Defines for the mode word
67 O65_CPU_65816 = $8000 ; Executable is for 65816
68 O65_CPU_6502 = $0000 ; Executable is for the 6502
69 O65_CPU_MASK = $8000 ; Mask to extract CPU type
71 O65_RELOC_PAGE = $4000 ; Page wise relocation
72 O65_RELOC_BYTE = $0000 ; Byte wise relocation
73 O65_RELOC_MASK = $4000 ; Mask to extract relocation type
75 O65_SIZE_32BIT = $2000 ; All size words are 32bit
76 O65_SIZE_16BIT = $0000 ; All size words are 16bit
77 O65_SIZE_MASK = $2000 ; Mask to extract size
79 O65_FTYPE_OBJ = $1000 ; Object file
80 O65_FTYPE_EXE = $0000 ; Executable file
81 O65_FTYPE_MASK = $1000 ; Mask to extract type
83 O65_ADDR_SIMPLE = $0800 ; Simple addressing
84 O65_ADDR_DEFAULT = $0000 ; Default addressing
85 O65_ADDR_MASK = $0800 ; Mask to extract addressing
87 O65_ALIGN_1 = $0000 ; Bytewise alignment
88 O65_ALIGN_2 = $0001 ; Align words
89 O65_ALIGN_4 = $0002 ; Align longwords
90 O65_ALIGN_256 = $0003 ; Align pages (256 bytes)
91 O65_ALIGN_MASK = $0003 ; Mask to extract alignment
93 ; The mode word as generated by the ld65 linker
94 O65_MODE_CC65 = O65_CPU_6502 | O65_RELOC_BYTE | O65_SIZE_16BIT | O65_FTYPE_EXE | O65_ADDR_SIMPLE | O65_ALIGN_1
96 ; Relocation type codes
100 O65_RTYPE_SEGADDR = $C0
105 O65_SEGID_UNDEF = $00
118 O65_OPT_TIMESTAMP = 4
120 ; Operating system codes for O65_OPT_OS
127 O65_LOAD_OK = 0 ; Module load successful
128 O65_LOAD_ERR_READ = 1 ; Read error
129 O65_LOAD_ERR_HDR = 2 ; Header error
130 O65_LOAD_ERR_OS = 3 ; Wrong OS
131 O65_LOAD_ERR_FMT = 4 ; Data format error
132 O65_LOAD_ERR_MEM = 5 ; Not enough memory