blob: f52ac57d888be871a1c61ca2198180989f710a93 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
; this file needs to be assembled with:
; cl65 -o newtitle.xex -t none newtitle.s
; It contains only an init routine, no run address.
.include "atari.inc"
; where our screen was loaded (see newtitle.pl)
screendata = $9000
; homebrew atari xex header
.word $ffff
.word version
.word end-1
; needs to be above the BSS (see taipan.map). we'll place it right at
; the end of screendata.
.org $a800
version:
.incbin "ver.dat"
; executable code here
start:
; setup color registers
lda #$c0 ; dark green
sta COLOR2 ; text bg
lda #$0c ; white
sta COLOR1
; turn off screen, in case vblank happens while we work
lda #0
sta SDMCTL
; wait for the next frame, to avoid graphics glitching
jsr wait1jiffy
; setup our display list
lda SDLSTL
sta FR0
lda SDLSTH
sta FR0+1
lda #<dlist
sta SDLSTL
lda #>dlist
sta SDLSTH
; switch to narrow playfield, enable screen
lda #$21
sta SDMCTL
; clear any keypress that happened during loading
lda #$ff
sta CH
; wait for user to press a key
wait4key:
lda CH
cmp #$ff
beq wait4key
; eat the keypress
lda #$ff
sta CH
; restore OS's display list
;lda #0
;sta SDMCTL ; disable screen again
;lda FR0
;sta SDLSTL
;lda FR0+1
;sta SDLSTH
;jsr wait1jiffy
; switch to normal playfield, enable screen. this is now
; done in atari_text_setup() in taipan.c, so the title screen
; can keep displaying.
;lda #$22
;sta SDMCTL
rts ; return to DOS
wait1jiffy:
lda RTCLOK+2
wait:
cmp RTCLOK+2
beq wait
rts
; display list here
dlist:
.byte $70 ; 24 scanlines of blanks
.byte $70
.byte $70
; .byte $30 ; 4 more since image is only 184 lines tall
.byte $0f | $40 ; LMS, BASIC mode 8
.word screendata
.repeat 127
.byte $0f ; 127 more scanlines of mode 8
.endrepeat
.byte $0f | $40 ; Hit 4K boundary, LMS again
.word screendata+$1000
.repeat 55
.byte $0f ; 55 more scanlines of mode 8
.endrepeat
; .byte $30 ; blank 4 lines to match GR.8 (does it even matter?)
.byte $02 | $40 ; LMS, 1 line of GR.0 for the version
.word version
.byte $41 ; JVB, jump & wait for vblank
.word dlist
end:
.word INITAD
.word INITAD+1
.word start
|