;
-; 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