File: ostype.s

package info (click to toggle)
cc65 2.19-2
  • links: PTS
  • area: main
  • in suites: forky, sid, trixie
  • size: 20,268 kB
  • sloc: ansic: 117,151; asm: 66,339; pascal: 4,248; makefile: 1,009; perl: 607
file content (176 lines) | stat: -rw-r--r-- 3,235 bytes parent folder | download | duplicates (2)
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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
;
; Christian Groessler, July 2004
; from Freddy Offenga's rominfo.c
;
; unsigned char get_ostype(void)
;
; x x x x x x x x   -   8 bit flag
; | | | | | | | |
; | | | | | +-+-+-- main OS rev.
; | | +-+-+-------- minor OS rev.
; +-+-------------- unused
;
; main OS rev.:
;       000 - unknown
;       001 - 400/800 ROM
;       010 - 1200XL ROM
;       011 - XL/XE ROM
;       1xx - unassigned
; minor OS rev.: (depending on main OS rev.);
;       400/800:
;               000 - unknown
;               001 - Rev. A PAL
;               010 - Rev. B PAL
;               011 - Rev. A NTSC
;               100 - Rev. B NTSC
;               101 - unassigned (up to 111)
;       1200XL:
;               000 - unknown
;               001 - Rev. 10
;               010 - Rev. 11
;               011 - unassigned (up to 111)
;       XL/XE:
;               000 - unknown
;               001 - Rev. 1
;               010 - Rev. 2
;               011 - Rev. 3
;               100 - Rev. 4
;               101 - unassigned (up to 111)
;

        .export         _get_ostype

        .include "atari.inc"
        .include "romswitch.inc"

.ifdef __ATARIXL__

        .import __CHARGEN_START__
        .segment "LOWCODE"

.macro  disable_rom_save_a
        pha
        disable_rom
        pla
.endmacro

.else   ; above atarixl, below atari

.macro  disable_rom_save_a
.endmacro

.endif  ; .ifdef __ATARIXL__


; unknown ROM

_unknown:
        lda     #0
        tax
        disable_rom_save_a
        rts


_get_ostype:

        enable_rom
        lda     $fcd8
        cmp     #$a2
        beq     _400800
        lda     $fff1
        cmp     #1
        beq     _1200xl
        lda     $fff7
        cmp     #1
        bcc     _unknown
        cmp     #5
        bcs     _unknown

;XL/XE ROM

        sec
        asl     a
        asl     a
        asl     a
        and     #%00111000
        ora     #%00000011
_fin:   ldx     #0
        disable_rom_save_a
        rts

; 1200XL ROM

_1200xl:
        lda     $fff7           ; revision #
        cmp     #10
        beq     _1200_10
        cmp     #11
        beq     _1200_11
        lda     #0              ; for unknown
        beq     _1200_fin

_1200_10:
        lda     #%00001000
        bne     _1200_fin

_1200_11:
        lda     #%00010000

_1200_fin:
        ora     #%00000010
        bne     _fin

; 400/800 ROM

_400800:
        lda     $fff8
        ldx     $fff9
        cmp     #$dd
        bne     _400800_1
        cpx     #$57
        bne     _400800_unknown

; 400/800 NTSC Rev. A

        lda     #%00011001
        bne     _fin

; 400/800 unknown

_400800_unknown:
        lda     #%00000001
        bne     _fin

_400800_1:
        cmp     #$d6
        bne     _400800_2
        cpx     #$57
        bne     _400800_unknown

; 400/800 PAL Rev. A

        lda     #%00001001
        bne     _fin

_400800_2:
        cmp     #$f3
        bne     _400800_3
        cpx     #$e6
        bne     _400800_unknown

; 400/800 NTSC Rev. B

        lda     #%00100001
        bne     _fin

_400800_3:

        cmp     #$22
        bne     _400800_unknown
        cpx     #$58
        bne     _400800_unknown

; 400/800 PAL Rev. B

        lda     #%00010001
        bne     _fin