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