]> git.sur5r.net Git - cc65/blob - libsrc/atari/ostype.s
Removed (pretty inconsistently used) tab chars from source code base.
[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 .proc   _get_ostype
44
45         lda     $fcd8
46         cmp     #$a2
47         beq     _400800
48         lda     $fff1
49         cmp     #1
50         beq     _1200xl
51         lda     $fff7
52         cmp     #1
53         bcc     _unknown
54         cmp     #5
55         bcs     _unknown
56
57 ;XL/XE ROM
58
59         sec
60         asl     a
61         asl     a
62         asl     a
63         and     #%00111000
64         ora     #%11
65 _fin:   ldx     #0
66         rts
67
68 ; unknown ROM
69
70 _unknown:
71         lda     #0
72         tax
73         rts
74
75 ; 1200XL ROM
76
77 _1200xl:
78         lda     $fff7           ; revision #
79         cmp     #10
80         beq     _1200_10
81         cmp     #11
82         beq     _1200_11
83         lda     #0              ; for unknown
84         beq     _1200_fin
85
86 _1200_10:
87         lda     #%00001000
88         bne     _1200_fin
89
90 _1200_11:
91         lda     #%00010000
92
93 _1200_fin:
94         ora     #%010
95         bne     _fin
96
97 ; 400/800 ROM
98
99 _400800:
100         lda     $fff8
101         ldx     $fff9
102         cmp     #$dd
103         bne     _400800_1
104         cpx     #$57
105         bne     _400800_unknown
106
107 ; 400/800 NTSC Rev. A
108
109         lda     #%00011001
110         bne     _fin
111
112 ; 400/800 unknown
113
114 _400800_unknown:
115         lda     #%00000001
116         bne     _fin
117
118 _400800_1:
119         cmp     #$d6
120         bne     _400800_2
121         cpx     #$57
122         bne     _400800_unknown
123
124 ; 400/800 PAL Rev. A
125
126         lda     #%00001001
127         bne     _fin
128
129 _400800_2:
130         cmp     #$f3
131         bne     _400800_3
132         cpx     #$e6
133         bne     _400800_unknown
134
135 ; 400/800 NTSC Rev. B
136
137         lda     #%00100001
138         bne     _fin
139
140 _400800_3:
141
142         cmp     #$22
143         bne     _400800_unknown
144         cpx     #$58
145         bne     _400800_unknown
146
147 ; 400/800 PAL Rev. B
148
149         lda     #%00010001
150         bne     _fin
151
152 .endproc