#define CH_CROSS '+'
/* Return codes for get_ostype */
-#define APPLE_IIPLAIN 0x01 /* Plain Apple ][ */
-#define APPLE_IIPLUS 0x02 /* Apple ][+ */
-#define APPLE_IIIEM 0x03 /* Apple /// in emulation mode */
-#define APPLE_IIE 0x04 /* Apple //e */
-#define APPLE_IIEENH 0x05 /* Enhanced Apple //e */
-#define APPLE_IIECARD 0x06 /* Apple //e Option Card */
-#define APPLE_IIC 0x07 /* Apple //c */
-
+#define APPLE_UNKNOWN 0x00
+#define APPLE_II 0x10 /* Apple ][ */
+#define APPLE_IIPLUS 0x11 /* Apple ][+ */
+#define APPLE_IIIEM 0x20 /* Apple /// (emulation) */
+#define APPLE_IIE 0x30 /* Apple //e */
+#define APPLE_IIEENH 0x31 /* Apple //e (enhanced) */
+#define APPLE_IIECARD 0x40 /* Apple //e Option Card */
+#define APPLE_IIC 0x50 /* Apple //c */
+#define APPLE_IIC35 0x51 /* Apple //c (3.5 ROM) */
+#define APPLE_IICEXP 0x53 /* Apple //c (Mem. Exp.) */
+#define APPLE_IICREV 0x54 /* Apple //c (Rev. Mem. Exp.) */
+#define APPLE_IICPLUS 0x55 /* Apple //c Plus */
+#define APPLE_IIGS 0x80 /* Apple IIgs */
+#define APPLE_IIGS1 0x81 /* Apple IIgs (ROM 1) */
+#define APPLE_IIGS3 0x83 /* Apple IIgs (ROM 3) */
/*****************************************************************************/
.export screensize
-.proc screensize
-
+screensize:
ldx #40
ldy #24
rts
-
-.endproc
chlinedirect:
cmp #$00 ; Is the length zero?
- beq L9 ; Jump if done
+ beq done ; Jump if done
sta tmp1
-L1: txa ; Screen code
+: txa ; Screen code
jsr cputdirect ; Direct output
dec tmp1
- bne L1
-L9: rts
+ bne :-
+done: rts
_cputc:
cmp #$0D ; Test for \r = carrage return
- bne L1
- lda #$00 ; Goto left edge of screen
- sta CH
- rts ; That's all we do
-L1:
+ beq left
cmp #$0A ; Test for \n = line feed
beq newline
ora #$80 ; Turn on high bit
cmp #$E0 ; Test for lowercase
- bmi cputdirect
+ bcc cputdirect
and #$DF ; Convert to uppercase
cputdirect:
inc CH ; Bump to next column
lda CH
cmp #40
- bne return
- lda #$00
+ bne done
+left: lda #$00 ; Goto left edge of screen
sta CH
-return:
- rts
-
-putchar:
- and INVFLG ; Apply normal, inverse, flash
- ldy CH
- sta (BASL),Y
- rts
+done: rts
newline:
- lda CH
- pha
inc CV
lda CV
cmp #24
- bne L2
+ bne :+
lda #$00
sta CV
-L2:
- jsr BASCALC
- pla
- sta CH
+: jsr BASCALC
rts
+putchar:
+ and INVFLG ; Apply normal, inverse, flash
+ ldy CH
+ sta (BASL),Y
+ rts
+
_gotoxy:
sta CV ; Store Y
jsr BASCALC
cvlinedirect:
cmp #$00 ; Is the length zero?
- beq L9 ; Jump if done
+ beq done ; Jump if done
sta tmp1
-L1: txa ; Screen code
+: txa ; Screen code
jsr putchar ; Write, no cursor advance
jsr newline ; Advance cursor to next line
dec tmp1
- bne L1
-L9: rts
+ bne :-
+done: rts
; ProDOS 2.0.2 $22
; ProDOS 2.0.3 $23
-
.constructor initdostype
.export __dos_type
bne done
lda $BFFF ; ProDOS KVERSION
cmp #$10
- bpl L1
+ bcs :+
ora #$10 ; Make high nibble match major version
-L1: sta __dos_type
+: sta __dos_type
done: rts
.bss
;
-; 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
.importzp sreg
-.code
-
-.proc __systime
-
+__systime:
lda #$FF
tax
sta sreg
sta sreg+1
rts ; Return -1
-
-.endproc
-
-
.include "apple2.inc"
-.proc _wherex
-
+_wherex:
lda CH
ldx #$00
rts
-
-.endproc
-
.include "apple2.inc"
-.proc _wherey
-
+_wherey:
lda CV
ldx #$00
rts
-
-.endproc
-
.include "../apple2/apple2.inc"
-.proc screensize
-
+screensize:
ldx WNDWDTH
ldy #24
rts
-
-.endproc
-
chlinedirect:
cmp #$00 ; Is the length zero?
- beq L9 ; Jump if done
+ beq done ; Jump if done
sta tmp1
-L1: txa ; Screen code
+: txa ; Screen code
jsr cputdirect ; Direct output
dec tmp1
- bne L1
-L9: rts
+ bne :-
+done: rts
.include "../apple2/apple2.inc"
-
initconio:
lda #$FF ; Normal character display mode
sta INVFLG
_cputc:
cmp #$0D ; Test for \r = carrage return
- bne L1
- stz CH ; Goto left edge of screen
- rts ; That's all we do
-L1:
+ beq left
cmp #$0A ; Test for \n = line feed
beq newline
ora #$80 ; Turn on high bit
inc CH ; Bump to next column
lda CH
cmp WNDWDTH
- bne return
- stz CH
-return:
+ bne done
+left: stz CH ; Goto left edge of screen
+done: rts
+
+newline:
+ inc CV
+ lda CV
+ cmp #24
+ bne :+
+ lda #$00
+ sta CV
+: jsr BASCALC
rts
putchar:
cpy #$FF ; Normal character display mode?
beq put
cmp #$E0 ; Lowercase?
- bmi mask
+ bcc mask
and #$7F ; Inverse lowercase
bra put
-mask:
- and INVFLG ; Apply normal, inverse, flash
-put:
- ldy CH
+mask: and INVFLG ; Apply normal, inverse, flash
+put: ldy CH
bit RD80VID ; In 80 column mode?
bpl col40 ; No, in 40 cols
pha
sta (BASL),Y
bit LOWSCR
rts
-col40:
- sta (BASL),Y
- rts
-
-newline:
- lda CH
- pha
- inc CV
- lda CV
- cmp #24
- bne L2
- lda #$00
- sta CV
-L2:
- jsr BASCALC
- pla
- sta CH
+col40: sta (BASL),Y
rts
_gotoxy:
cvlinedirect:
cmp #$00 ; Is the length zero?
- beq L9 ; Jump if done
+ beq done ; Jump if done
sta tmp1
-L1: txa ; Screen code
+: txa ; Screen code
jsr putchar ; Write, no cursor advance
jsr newline ; Advance cursor to next line
dec tmp1
- bne L1
-L9: rts
+ bne :-
+done: rts
plx ; Restore index
loop: lda XOFFS,x
clc
- bpl L1 ; Relative to left edge?
+ bpl :+ ; Relative to left edge?
adc WIDTH
-L1: adc XORIGIN
+: adc XORIGIN
jsr pusha
lda YOFFS,x
clc
- bpl L2 ; Relative to top?
+ bpl :+ ; Relative to top?
adc HEIGHT
-L2: adc YORIGIN
+: adc YORIGIN
jsr _gotoxy ; Call this one, will pop params
txa
tay