;
-; Christian Groessler, July 2000
+; Christian Groessler, July 2004
; from Freddy Offenga's rominfo.c
;
-; unsigned int get_ostype(void)
+; unsigned char get_ostype(void)
;
-; x x x x x x x x x x x x x x x x - 16 bit flag
-; | | | | | | | | | | | | | | | |
-; | | | | | | | | | | | | | +-+-+-- main OS rev.
-; | | | | | | | | | | | +-+-------- PAL/NTSC flag
-; | | | | | | | | +-+-+------------ minor OS rev.
-; +-+-+-+-+-+-+-+------------------- unused
+; 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
-; PAL/NTSC flag:
-; 00 - unknown
-; 01 - PAL
-; 10 - NTSC
-; 11 - (invalid)
+; 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
-; 010 - Rev. B
-; 011 - 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)
+; 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"
- .export _get_ostype
- .importzp tmp1
+.if .defined(__ATARIXL__)
+.warning "fix me!"
+.endif
-.proc _get_ostype
+.proc _get_ostype
- lda $fcd8
- cmp #$a2
- beq _400800
- lda $fff1
- cmp #1
- beq _1200xl
- lda $fff7
- cmp #1
- bcc _unknown
- cmp #5
- bcs _unknown
+ 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
- asl a
- asl a
- and #%11100000
- ora #%11
-_fin_xl:sta tmp1
- lda PALNTS ; get OS PAL/NTSC flag (0 = NTSC, 1 = PAL)
- beq _xl_ntsc
- cmp #1
- beq _xl_pal
- lda #0
- beq _fxlcont
-
-_xl_ntsc:
- lda #%10
- bne _fxlcont
-
-_xl_pal:lda #1
-
-_fxlcont:
- asl a
- asl a
- asl a
- ora tmp1
-
-_fin: ldx #0
- rts
+ sec
+ asl a
+ asl a
+ asl a
+ and #%00111000
+ ora #%11
+_fin: ldx #0
+ rts
; unknown ROM
_unknown:
- lda #0
- tax
- rts
+ lda #0
+ tax
+ rts
; 1200XL ROM
_1200xl:
- lda $fff7 ; revision #
- cmp #10
- beq _1200_10
- cmp #11
- beq _1200_11
- lda #0 ; for unknown
- beq _1200_fin
+ lda $fff7 ; revision #
+ cmp #10
+ beq _1200_10
+ cmp #11
+ beq _1200_11
+ lda #0 ; for unknown
+ beq _1200_fin
_1200_10:
- lda #%00100000
- bne _1200_fin
+ lda #%00001000
+ bne _1200_fin
_1200_11:
- lda #%01000000
+ lda #%00010000
_1200_fin:
- ora #%010
- bne _fin_xl
+ ora #%010
+ bne _fin
; 400/800 ROM
_400800:
- lda $fff8
- ldx $fff9
- cmp #$dd
- bne _400800_1
- cpx #$57
- bne _400800_unknown
+ lda $fff8
+ ldx $fff9
+ cmp #$dd
+ bne _400800_1
+ cpx #$57
+ bne _400800_unknown
; 400/800 NTSC Rev. A
- lda #%00110001
- bne _400800_done
+ lda #%00011001
+ bne _fin
; 400/800 unknown
_400800_unknown:
- lda #%00000001
- bne _400800_done
+ lda #%00000001
+ bne _fin
_400800_1:
- cmp #$d6
- bne _400800_2
- cpx #$57
- bne _400800_unknown
+ cmp #$d6
+ bne _400800_2
+ cpx #$57
+ bne _400800_unknown
; 400/800 PAL Rev. A
- lda #%00101001
- bne _400800_done
+ lda #%00001001
+ bne _fin
_400800_2:
- cmp #$f3
- bne _400800_3
- cpx #$e6
- bne _400800_unknown
+ cmp #$f3
+ bne _400800_3
+ cpx #$e6
+ bne _400800_unknown
; 400/800 NTSC Rev. B
- lda #%01010001
- bne _400800_done
+ lda #%00100001
+ bne _fin
_400800_3:
- cmp #$22
- bne _400800_unknown
- cpx #$58
- bne _400800_unknown
+ cmp #$22
+ bne _400800_unknown
+ cpx #$58
+ bne _400800_unknown
; 400/800 PAL Rev. B
- lda #%01001001
-
-_400800_done:
- bne _fin
+ lda #%00010001
+ bne _fin
.endproc