1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
; initial load segment for taipan. intended to be a tiny (1-sector)
; routine that checks for the presence of BASIC or a cartridge, and
; aborts the load if found.
; cl65 -o checkmem.xex -t none checkmem.s
.include "atari.inc"
start = $0600 ; use page 6 for now
.word $ffff
.word start
.word end-1
.org start
msg:
.incbin "cartmsg.dat"
msglen = * - msg - 1
S: .byte "S:",0
init:
ldx #6*$10 ; CLOSE #6
lda #CLOSE
sta ICCOM,x
jsr CIOV
; GRAPHICS 0
ldx #6*$10 ; IOCB #6
lda #OPEN
sta ICCOM,x
lda #$1c ; $c = read/write
sta ICAX1,x
lda #0 ; aux2 byte zero
sta ICAX2,x
lda #<S
sta ICBAL,x
lda #>S
sta ICBAH,x
jsr CIOV
lda RAMTOP
cmp #$c0
bcc have_cart
; if ramtop is $c000 or higher, we're OK, just exit.
rts
have_cart:
; if ramtop is below $c000, we have a cartridge (or XL BASIC).
; print the "remove cart" message...
lda #<msg
sta FR0
lda #>msg
sta FR0+1
ldy #msglen
msgloop:
lda (FR0),y
sta (SAVMSC),y
dey
bpl msgloop
; ...wait for a keystroke...
wait4key:
lda CH
cmp #$ff
beq wait4key
; ...and do a warmstart.
jmp WARMSV
end:
.word INITAD
.word INITAD+1
.word init
|