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
|