]> git.sur5r.net Git - cc65/blobdiff - libsrc/atari/ostype.s
more atarixl linker cfg file cleanups; adapt atarixl-overlay.cfg
[cc65] / libsrc / atari / ostype.s
index 3528b7924dc1154ded7921a917ed4cae409b1a0d..7a3342d2ac48f4c5a433b21e82d1cecdea770a2f 100644 (file)
 ;
-; Christian Groessler, June 2004
+; Christian Groessler, July 2004
 ; from Freddy Offenga's rominfo.c
 ;
-; unsigned char _get_ostype(void)
+; unsigned char get_ostype(void)
 ;
-; x x x x x x x x   -  8 bit flag
+; 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
+;       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)
+;       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
-
-.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
+        .export         _get_ostype
+
+.if .defined(__ATARIXL__)
+
+        .include "atari.inc"
+        .import __CHARGEN_START__
+        .segment "LOWCODE"
+.macro  disable_rom
+        pha
+        lda     PORTB
+        and     #$fe
+        sta     PORTB
+        lda     #>__CHARGEN_START__
+        sta     CHBAS
+        sta     CHBASE
+        pla
+.endmacro
+.macro  enable_rom
+        lda     PORTB
+        ora     #1
+        sta     PORTB
+        lda     #$E0
+        sta     CHBAS
+        sta     CHBASE
+.endmacro
+
+.else   ; above atarixl, below atari
+
+.macro  disable_rom
+.endmacro
+.macro  enable_rom
+.endmacro
+
+.endif
+
+.proc   _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     #%11
-_fin:  ldx     #0
-       rts
+        sec
+        asl     a
+        asl     a
+        asl     a
+        and     #%00111000
+        ora     #%11
+_fin:   ldx     #0
+        disable_rom
+        rts
 
 ; unknown ROM
 
 _unknown:
-       lda     #0
-       tax
-       rts
+        lda     #0
+        tax
+        disable_rom
+        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     #%00001000
-       bne     _1200_fin
+        lda     #%00001000
+        bne     _1200_fin
 
 _1200_11:
-       lda     #%00010000
+        lda     #%00010000
 
 _1200_fin:
-       ora     #%010
-       bne     _fin
+        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     #%00011001
-       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     #%00001001
-       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     #%00100001
-       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     #%00010001
-
-_400800_done:
-       bne     _fin
+        lda     #%00010001
+        bne     _fin
 
 .endproc