]> git.sur5r.net Git - cc65/blob - libsrc/atari/ostype.s
Fix comments and TELEMON uppercase
[cc65] / libsrc / atari / ostype.s
1 ;
2 ; Christian Groessler, July 2004
3 ; from Freddy Offenga's rominfo.c
4 ;
5 ; unsigned char get_ostype(void)
6 ;
7 ; x x x x x x x x   -   8 bit flag
8 ; | | | | | | | |
9 ; | | | | | +-+-+-- main OS rev.
10 ; | | +-+-+-------- minor OS rev.
11 ; +-+-------------- unused
12 ;
13 ; main OS rev.:
14 ;       000 - unknown
15 ;       001 - 400/800 ROM
16 ;       010 - 1200XL ROM
17 ;       011 - XL/XE ROM
18 ;       1xx - unassigned
19 ; minor OS rev.: (depending on main OS rev.);
20 ;       400/800:
21 ;               000 - unknown
22 ;               001 - Rev. A PAL
23 ;               010 - Rev. B PAL
24 ;               011 - Rev. A NTSC
25 ;               100 - Rev. B NTSC
26 ;               101 - unassigned (up to 111)
27 ;       1200XL:
28 ;               000 - unknown
29 ;               001 - Rev. 10
30 ;               010 - Rev. 11
31 ;               011 - unassigned (up to 111)
32 ;       XL/XE:
33 ;               000 - unknown
34 ;               001 - Rev. 1
35 ;               010 - Rev. 2
36 ;               011 - Rev. 3
37 ;               100 - Rev. 4
38 ;               101 - unassigned (up to 111)
39 ;
40
41         .export         _get_ostype
42
43         .include "atari.inc"
44         .include "romswitch.inc"
45
46 .ifdef __ATARIXL__
47
48         .import __CHARGEN_START__
49         .segment "LOWCODE"
50
51 .macro  disable_rom_save_a
52         pha
53         disable_rom
54         pla
55 .endmacro
56
57 .else   ; above atarixl, below atari
58
59 .macro  disable_rom_save_a
60 .endmacro
61
62 .endif  ; .ifdef __ATARIXL__
63
64
65 ; unknown ROM
66
67 _unknown:
68         lda     #0
69         tax
70         disable_rom_save_a
71         rts
72
73
74 _get_ostype:
75
76         enable_rom
77         lda     $fcd8
78         cmp     #$a2
79         beq     _400800
80         lda     $fff1
81         cmp     #1
82         beq     _1200xl
83         lda     $fff7
84         cmp     #1
85         bcc     _unknown
86         cmp     #5
87         bcs     _unknown
88
89 ;XL/XE ROM
90
91         sec
92         asl     a
93         asl     a
94         asl     a
95         and     #%00111000
96         ora     #%11
97 _fin:   ldx     #0
98         disable_rom_save_a
99         rts
100
101 ; 1200XL ROM
102
103 _1200xl:
104         lda     $fff7           ; revision #
105         cmp     #10
106         beq     _1200_10
107         cmp     #11
108         beq     _1200_11
109         lda     #0              ; for unknown
110         beq     _1200_fin
111
112 _1200_10:
113         lda     #%00001000
114         bne     _1200_fin
115
116 _1200_11:
117         lda     #%00010000
118
119 _1200_fin:
120         ora     #%010
121         bne     _fin
122
123 ; 400/800 ROM
124
125 _400800:
126         lda     $fff8
127         ldx     $fff9
128         cmp     #$dd
129         bne     _400800_1
130         cpx     #$57
131         bne     _400800_unknown
132
133 ; 400/800 NTSC Rev. A
134
135         lda     #%00011001
136         bne     _fin
137
138 ; 400/800 unknown
139
140 _400800_unknown:
141         lda     #%00000001
142         bne     _fin
143
144 _400800_1:
145         cmp     #$d6
146         bne     _400800_2
147         cpx     #$57
148         bne     _400800_unknown
149
150 ; 400/800 PAL Rev. A
151
152         lda     #%00001001
153         bne     _fin
154
155 _400800_2:
156         cmp     #$f3
157         bne     _400800_3
158         cpx     #$e6
159         bne     _400800_unknown
160
161 ; 400/800 NTSC Rev. B
162
163         lda     #%00100001
164         bne     _fin
165
166 _400800_3:
167
168         cmp     #$22
169         bne     _400800_unknown
170         cpx     #$58
171         bne     _400800_unknown
172
173 ; 400/800 PAL Rev. B
174
175         lda     #%00010001
176         bne     _fin