aboutsummaryrefslogtreecommitdiff
path: root/checkmem.s
blob: 90d21dbea49ae011103e46b3c4030cb95090b1cb (plain)
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
80
81
82
83

; 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:
 lda RAMSIZ
 cmp #$c0
 php
 sta RAMTOP

 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

 plp
 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