mirror of
https://github.com/cc65/cc65.git
synced 2024-08-14 14:29:07 +00:00
The constructors are _NOT_ allowed anymore to access the BSS. Rather they must use the DATA segment or the INIT segment. The latter isn't cleared at any point so the constructors may use it to expose values to the main program. However they must make sure to always write the values as they are not pre-initialized.
71 lines
2.1 KiB
ArmAsm
71 lines
2.1 KiB
ArmAsm
;
|
|
; Oliver Schmidt, 04.01.2005
|
|
;
|
|
; unsigned char get_ostype (void)
|
|
;
|
|
|
|
.constructor initostype
|
|
.export _get_ostype
|
|
|
|
; Identify machine according to:
|
|
; Apple II Miscellaneous TechNote #7, Apple II Family Identification
|
|
|
|
.segment "ONCE"
|
|
|
|
initostype:
|
|
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
|
|
|
|
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
|
|
|
|
.code
|
|
|
|
_get_ostype:
|
|
lda ostype
|
|
ldx #$00
|
|
rts
|
|
|
|
.segment "INIT"
|
|
|
|
ostype: .res 1
|