2018-07-12 16:30:35 +00:00
|
|
|
|
|
|
|
#if not(ATARI_2600)
|
|
|
|
#warn vcs_hardware module should be only used on Atari 2600-compatible targets
|
|
|
|
#endif
|
|
|
|
|
2018-12-16 20:07:04 +00:00
|
|
|
volatile byte VSYNC @$00
|
|
|
|
volatile byte VBLANK @$01
|
|
|
|
volatile byte WSYNC @$02
|
|
|
|
volatile byte RSYNC @$03
|
|
|
|
volatile byte NUSIZ0 @$04
|
|
|
|
volatile byte NUSIZ1 @$05
|
|
|
|
volatile byte COLUP0 @$06
|
|
|
|
volatile byte COLUP1 @$07
|
|
|
|
volatile byte COLUPF @$08
|
|
|
|
volatile byte COLUBK @$09
|
|
|
|
volatile byte CTRLPF @$0A
|
|
|
|
volatile byte REFP0 @$0B
|
|
|
|
volatile byte REFP1 @$0C
|
|
|
|
volatile byte PF0 @$0D
|
|
|
|
volatile byte PF1 @$0E
|
|
|
|
volatile byte PF2 @$0F
|
|
|
|
volatile byte RESP0 @$10
|
|
|
|
volatile byte RESP1 @$11
|
|
|
|
volatile byte RESM0 @$12
|
|
|
|
volatile byte RESM1 @$13
|
|
|
|
volatile byte RESBL @$14
|
|
|
|
volatile byte AUDC0 @$15
|
|
|
|
volatile byte AUDC1 @$16
|
|
|
|
volatile byte AUDF0 @$17
|
|
|
|
volatile byte AUDF1 @$18
|
|
|
|
volatile byte AUDV0 @$19
|
|
|
|
volatile byte AUDV1 @$1A
|
|
|
|
volatile byte GRP0 @$1B
|
|
|
|
volatile byte GRP1 @$1C
|
|
|
|
volatile byte ENAM0 @$1D
|
|
|
|
volatile byte ENAM1 @$1E
|
|
|
|
volatile byte ENABL @$1F
|
|
|
|
volatile byte HMP0 @$20
|
|
|
|
volatile byte HMP1 @$21
|
|
|
|
volatile byte HMM0 @$22
|
|
|
|
volatile byte HMM1 @$23
|
|
|
|
volatile byte HMBL @$24
|
|
|
|
volatile byte VDELP0 @$25
|
|
|
|
volatile byte VDELP1 @$26
|
|
|
|
volatile byte VDELBL @$27
|
|
|
|
volatile byte RESMP0 @$28
|
|
|
|
volatile byte RESMP1 @$29
|
|
|
|
volatile byte HMOVE @$2A
|
|
|
|
volatile byte HMCLR @$2B
|
|
|
|
volatile byte CXCLR @$2C
|
|
|
|
volatile byte CXM0P @$30
|
|
|
|
volatile byte CXM1P @$31
|
|
|
|
volatile byte CXP0FB @$32
|
|
|
|
volatile byte CXP1FB @$33
|
|
|
|
volatile byte CXM0FB @$34
|
|
|
|
volatile byte CXM1FB @$35
|
|
|
|
volatile byte CXBLPF @$36
|
|
|
|
volatile byte CXPPMM @$37
|
|
|
|
volatile byte INPT0 @$38
|
|
|
|
volatile byte INPT1 @$39
|
|
|
|
volatile byte INPT2 @$3A
|
|
|
|
volatile byte INPT3 @$3B
|
|
|
|
volatile byte INPT4 @$3C
|
|
|
|
volatile byte INPT5 @$3D
|
|
|
|
volatile byte SWCHA @$0280
|
|
|
|
volatile byte SWACNT @$0281
|
|
|
|
volatile byte SWCHB @$0282
|
|
|
|
volatile byte SWBCNT @$0283
|
|
|
|
volatile byte INTIM @$0284
|
|
|
|
volatile byte INSTAT @$0285
|
|
|
|
volatile byte TIM1T @$0294
|
|
|
|
volatile byte TIM8T @$0295
|
|
|
|
volatile byte TIM64T @$0296
|
|
|
|
volatile byte T1024T @$0297
|
2018-04-03 21:13:57 +00:00
|
|
|
|
|
|
|
|
|
|
|
macro asm void wsync() {
|
|
|
|
STA WSYNC
|
|
|
|
}
|
|
|
|
|
|
|
|
macro asm void start_frame() {
|
2018-12-16 20:07:04 +00:00
|
|
|
? LDA #0
|
|
|
|
! STA VBLANK
|
|
|
|
? LDA #2
|
|
|
|
! STA VSYNC
|
|
|
|
! STA WSYNC
|
|
|
|
! STA WSYNC
|
|
|
|
! STA WSYNC
|
|
|
|
! LDA #0
|
|
|
|
! STA VSYNC
|
|
|
|
? LDX #37
|
2018-04-03 21:13:57 +00:00
|
|
|
start_frame_loop:
|
2018-12-16 20:07:04 +00:00
|
|
|
! STA WSYNC
|
|
|
|
? DEX
|
2018-04-03 21:13:57 +00:00
|
|
|
BNE start_frame_loop
|
|
|
|
}
|
|
|
|
macro asm void end_frame() {
|
2018-12-16 20:07:04 +00:00
|
|
|
? LDA #%01000010
|
|
|
|
! STA VBLANK
|
|
|
|
? LDX #30
|
2018-04-03 21:13:57 +00:00
|
|
|
end_frame_loop:
|
2018-12-16 20:07:04 +00:00
|
|
|
! STA WSYNC
|
|
|
|
? DEX
|
2018-04-03 21:13:57 +00:00
|
|
|
BNE end_frame_loop
|
|
|
|
}
|
|
|
|
|
|
|
|
asm void reset_routine() @$FFF4 {
|
|
|
|
LDX #$FF
|
|
|
|
TXS
|
|
|
|
JMP main
|
|
|
|
}
|
|
|
|
|
2018-07-03 21:29:37 +00:00
|
|
|
array __vectors @$FFFA = @word [
|
|
|
|
reset_routine.addr,
|
|
|
|
reset_routine.addr,
|
|
|
|
reset_routine.addr
|
2018-04-03 21:13:57 +00:00
|
|
|
]
|