]> git.sur5r.net Git - cc65/blob - asminc/c64.inc
c12f8e64bde7825f7c5737a2b4639f9fd22e4378
[cc65] / asminc / c64.inc
1 ;
2 ; C64 generic definitions. Stolen from Elite128
3 ;
4
5
6 ; ---------------------------------------------------------------------------
7 ; Zero page, Commodore stuff
8
9 VARTAB          := $2D          ; Pointer to start of BASIC variables
10 MEMSIZE         := $37          ; Pointer to highest BASIC RAM location (+1)
11 TXTPTR          := $7A          ; Pointer into BASIC source code
12 TIME            := $A0          ; 60 HZ clock
13 FNAM_LEN        := $B7          ; Length of filename
14 SECADR          := $B9          ; Secondary address
15 DEVNUM          := $BA          ; Device number
16 FNAM            := $BB          ; Pointer to filename
17 KEY_COUNT       := $C6          ; Number of keys in input buffer
18 RVS             := $C7          ; Reverse flag
19 CURS_FLAG       := $CC          ; 1 = cursor off
20 CURS_BLINK      := $CD          ; Blink counter
21 CURS_CHAR       := $CE          ; Character under the cursor
22 CURS_STATE      := $CF          ; Cursor blink state
23 SCREEN_PTR      := $D1          ; Pointer to current char in text screen
24 CURS_X          := $D3          ; Cursor column
25 CURS_Y          := $D6          ; Cursor row
26 CRAM_PTR        := $F3          ; Pointer to current char in color RAM
27 FREKZP          := $FB          ; Five unused bytes
28
29 BASIC_BUF       := $200         ; Location of command-line
30 BASIC_BUF_LEN   = 89            ; Maximum length of command-line
31
32 CHARCOLOR       := $286
33 CURS_COLOR      := $287         ; Color under the cursor
34 PALFLAG         := $2A6         ; $01 = PAL, $00 = NTSC
35
36 KBDREPEAT       := $28a
37 KBDREPEATRATE   := $28b
38 KBDREPEATDELAY  := $28c
39
40 ; ---------------------------------------------------------------------------
41 ; Kernal routines
42
43 ; Direct entries
44 CLRSCR          := $E544
45 KBDREAD         := $E5B4
46 NMIEXIT         := $FEBC
47
48 ; ---------------------------------------------------------------------------
49 ; Vector and other locations
50
51 IRQVec          := $0314
52 BRKVec          := $0316
53 NMIVec          := $0318
54
55 ; ---------------------------------------------------------------------------
56 ; Screen size
57
58 XSIZE           = 40
59 YSIZE           = 25
60
61 ; ---------------------------------------------------------------------------
62 ; I/O: VIC
63
64 VIC             := $D000
65 VIC_SPR0_X      := $D000
66 VIC_SPR0_Y      := $D001
67 VIC_SPR1_X      := $D002
68 VIC_SPR1_Y      := $D003
69 VIC_SPR2_X      := $D004
70 VIC_SPR2_Y      := $D005
71 VIC_SPR3_X      := $D006
72 VIC_SPR3_Y      := $D007
73 VIC_SPR4_X      := $D008
74 VIC_SPR4_Y      := $D009
75 VIC_SPR5_X      := $D00A
76 VIC_SPR5_Y      := $D00B
77 VIC_SPR6_X      := $D00C
78 VIC_SPR6_Y      := $D00D
79 VIC_SPR7_X      := $D00E
80 VIC_SPR7_Y      := $D00F
81 VIC_SPR_HI_X    := $D010
82 VIC_SPR_ENA     := $D015
83 VIC_SPR_EXP_Y   := $D017
84 VIC_SPR_EXP_X   := $D01D
85 VIC_SPR_MCOLOR  := $D01C
86 VIC_SPR_BG_PRIO := $D01B
87
88 VIC_SPR_MCOLOR0 := $D025
89 VIC_SPR_MCOLOR1 := $D026
90
91 VIC_SPR0_COLOR  := $D027
92 VIC_SPR1_COLOR  := $D028
93 VIC_SPR2_COLOR  := $D029
94 VIC_SPR3_COLOR  := $D02A
95 VIC_SPR4_COLOR  := $D02B
96 VIC_SPR5_COLOR  := $D02C
97 VIC_SPR6_COLOR  := $D02D
98 VIC_SPR7_COLOR  := $D02E
99
100 VIC_CTRL1       := $D011
101 VIC_CTRL2       := $D016
102
103 VIC_HLINE       := $D012
104
105 VIC_LPEN_X      := $D013
106 VIC_LPEN_Y      := $D014
107
108 VIC_VIDEO_ADR   := $D018
109
110 VIC_IRR         := $D019        ; Interrupt request register
111 VIC_IMR         := $D01A        ; Interrupt mask register
112
113 VIC_BORDERCOLOR := $D020
114 VIC_BG_COLOR0   := $D021
115 VIC_BG_COLOR1   := $D022
116 VIC_BG_COLOR2   := $D023
117 VIC_BG_COLOR3   := $D024
118
119 ; 128 stuff:
120 VIC_KBD_128     := $D02F        ; Extended kbd bits (visible in 64 mode)
121 VIC_CLK_128     := $D030        ; Clock rate register (visible in 64 mode)
122
123
124 ; ---------------------------------------------------------------------------
125 ; I/O: SID
126
127 SID             := $D400
128 SID_S1Lo        := $D400
129 SID_S1Hi        := $D401
130 SID_PB1Lo       := $D402
131 SID_PB1Hi       := $D403
132 SID_Ctl1        := $D404
133 SID_AD1         := $D405
134 SID_SUR1        := $D406
135
136 SID_S2Lo        := $D407
137 SID_S2Hi        := $D408
138 SID_PB2Lo       := $D409
139 SID_PB2Hi       := $D40A
140 SID_Ctl2        := $D40B
141 SID_AD2         := $D40C
142 SID_SUR2        := $D40D
143
144 SID_S3Lo        := $D40E
145 SID_S3Hi        := $D40F
146 SID_PB3Lo       := $D410
147 SID_PB3Hi       := $D411
148 SID_Ctl3        := $D412
149 SID_AD3         := $D413
150 SID_SUR3        := $D414
151
152 SID_FltLo       := $D415
153 SID_FltHi       := $D416
154 SID_FltCtl      := $D417
155 SID_Amp         := $D418
156 SID_ADConv1     := $D419
157 SID_ADConv2     := $D41A
158 SID_Noise       := $D41B
159 SID_Read3       := $D41C
160
161 ; ---------------------------------------------------------------------------
162 ; I/O: VDC (128 only)
163
164 VDC_INDEX       := $D600
165 VDC_DATA        := $D601
166
167 ; ---------------------------------------------------------------------------
168 ; I/O: Complex Interface Adapters
169
170 CIA1            := $DC00
171 CIA1_PRA        := $DC00        ; Port A
172 CIA1_PRB        := $DC01        ; Port B
173 CIA1_DDRA       := $DC02        ; Data direction register for port A
174 CIA1_DDRB       := $DC03        ; Data direction register for port B
175 CIA1_TA         := $DC04        ; 16-bit timer A
176 CIA1_TB         := $DC06        ; 16-bit timer B
177 CIA1_TOD10      := $DC08        ; Time-of-day tenths of a second
178 CIA1_TODSEC     := $DC09        ; Time-of-day seconds
179 CIA1_TODMIN     := $DC0A        ; Time-of-day minutes
180 CIA1_TODHR      := $DC0B        ; Time-of-day hours
181 CIA1_SDR        := $DC0C        ; Serial data register
182 CIA1_ICR        := $DC0D        ; Interrupt control register
183 CIA1_CRA        := $DC0E        ; Control register for timer A
184 CIA1_CRB        := $DC0F        ; Control register for timer B
185
186 CIA2            := $DD00
187 CIA2_PRA        := $DD00
188 CIA2_PRB        := $DD01
189 CIA2_DDRA       := $DD02
190 CIA2_DDRB       := $DD03
191 CIA2_TA         := $DD04
192 CIA2_TB         := $DD06
193 CIA2_TOD10      := $DD08
194 CIA2_TODSEC     := $DD09
195 CIA2_TODMIN     := $DD0A
196 CIA2_TODHR      := $DD0B
197 CIA2_SDR        := $DD0C
198 CIA2_ICR        := $DD0D
199 CIA2_CRA        := $DD0E
200 CIA2_CRB        := $DD0F
201
202 ; ---------------------------------------------------------------------------
203 ; Super CPU
204
205 SCPU_VIC_Bank1  := $D075
206 SCPU_Slow       := $D07A
207 SCPU_Fast       := $D07B
208 SCPU_EnableRegs := $D07E
209 SCPU_DisableRegs:= $D07F
210 SCPU_Detect     := $D0BC
211
212
213 ; ---------------------------------------------------------------------------
214 ; Processor Port at $01
215
216 LORAM           = $01           ; Enable the basic rom
217 HIRAM           = $02           ; Enable the kernal rom
218 IOEN            = $04           ; Enable I/O
219 CASSDATA        = $08           ; Cassette data
220 CASSPLAY        = $10           ; Cassette: Play
221 CASSMOT         = $20           ; Cassette motor on
222 TP_FAST         = $80           ; Switch Rossmoeller TurboProcess to fast mode
223
224 RAMONLY         = $F8           ; (~(LORAM | HIRAM | IOEN)) & $FF