]> git.sur5r.net Git - cc65/blobdiff - libsrc/apple2/get_ostype.s
New code from Oliver Schmidt
[cc65] / libsrc / apple2 / get_ostype.s
index d23254e190c53160813e69144ebdfddd32543d71..9523d8b5e45e33f0090d27787d5aa8886ae2086d 100644 (file)
@@ -1,52 +1,70 @@
 ;
-; Stefan Haubenthal, Jul 12 2003
+; Oliver Schmidt, 04.01.2005
 ;
 ; unsigned char get_ostype(void)
 ;
 
        .constructor    initostype
-       .export         _get_ostype, ostype
+       .export         _get_ostype
 
 ; Identify machine according to:
 ; "Apple II Miscellaneous TechNote #7: Apple II Family Identification"
 
 initostype:
-       ldx     #$01            ; Start out with a plain Apple ][
-       lda     $FBB3
-       cmp     #$38
-       beq     identified
-       inx                     ; It's at least an Apple ][+
-       cmp     #$EA
-       bne     apple2e
-       lda     $FB1E
-       cmp     #$AD
-       beq     identified
-       inx                     ; It's an Apple /// in emulation mode
-       bne     identified      ; Branch always
-apple2e:
-       ldx     #$04            ; It's at least an Apple //e
-       lda     $FBC0
-       cmp     #$EA
-       beq     identified
-       inx                     ; It's at least an enhanced Apple //e
-       cmp     #$E0
-       bne     apple2c
-       lda     $FBDD
-       cmp     #$02
-       bne     identified
-       inx                     ; It's an Apple //e Option Card
-       bne     identified      ; Branch always
-apple2c:
-       ldx     #$07            ; It's an Apple //c
-identified:
-       stx     ostype
+       sec
+       jsr     $FE1F
+       bcs     nogs
+       tya
+       ora     #$80
+done:  sta     ostype
        rts
+nogs:  ldx     #$FF
+next:  inx
+       lda     value,x
+       ldy     index,x
+       beq     done            ; $00 is no valid index
+       cmp     $FB00,y
+       beq     next
+:      inx
+       ldy     index,x
+       bne     :-
+       beq     next            ; Branch always
 
 _get_ostype:
        lda     ostype
        ldx     #$00
        rts
 
+
+       .rodata
+
+index: .byte   $B3, $00                ; Apple ][
+       .byte   $B3, $1E, $00           ; Apple ][+
+       .byte   $B3, $1E, $00           ; Apple /// (emulation)
+       .byte   $B3, $C0, $00           ; Apple //e
+       .byte   $B3, $C0, $DD, $BE, $00 ; Apple //e Option Card
+       .byte   $B3, $C0, $00           ; Apple //e (enhanced)
+       .byte   $B3, $C0, $BF, $00      ; Apple //c
+       .byte   $B3, $C0, $BF, $00      ; Apple //c (3.5 ROM)
+       .byte   $B3, $C0, $BF, $00      ; Apple //c (Mem. Exp.)
+       .byte   $B3, $C0, $BF, $00      ; Apple //c (Rev. Mem. Exp.)
+       .byte   $B3, $C0, $BF, $00      ; Apple //c Plus
+       .byte   $00
+
+value: .byte   $38, $10                ; Apple ][
+       .byte   $EA, $AD, $11           ; Apple ][+
+       .byte   $EA, $8A, $20           ; Apple /// (emulation)
+       .byte   $06, $EA, $30           ; Apple //e
+       .byte   $06, $E0, $02, $00, $40 ; Apple //e Option Card
+       .byte   $06, $E0, $31           ; Apple //e (enhanced)
+       .byte   $06, $00, $FF, $50      ; Apple //c
+       .byte   $06, $00, $00, $51      ; Apple //c (3.5 ROM)
+       .byte   $06, $00, $03, $53      ; Apple //c (Mem. Exp.)
+       .byte   $06, $00, $04, $54      ; Apple //c (Rev. Mem. Exp.)
+       .byte   $06, $00, $05, $55      ; Apple //c Plus
+       .byte   $00
+
+
        .bss
 
 ostype:        .res    1