1;----------------------------------------------------------------------
2; Vectors, Memory
3;----------------------------------------------------------------------
4; (C)1983 Commodore Business Machines (CBM)
5; additions: (C)2020 Michael Steil, License: 2-clause BSD
6
7.feature labels_without_colons
8
9.include "io.inc"
10
11.import nsave, nload, nclall, ngetin, nstop, nbsout, nbasin, nclrch, nckout, nchkin, nclose, nopen, nnmi, timb, key, cinv
12.importzp tmp2
13.export iobase, membot, memtop, restor, vector
14
15.segment "KVAR"
16
17memstr	.res 2           ; start of memory
18memsiz	.res 2           ; top of memory
19rambks	.res 1           ; X16: number of ram banks (0 means 256)
20
21.segment "MEMORY"
22
23; restor - set kernal indirects and vectors (system)
24;
25restor	ldx #<vectss
26	ldy #>vectss
27	clc
28;
29; vector - set kernal indirect and vectors (user)
30;
31vector	stx tmp2
32	sty tmp2+1
33	ldy #vectse-vectss-1
34movos1	lda cinv,y      ;get from storage
35	bcs movos2      ;c...want storage to user
36	lda (tmp2),y    ;...want user to storage
37movos2	sta (tmp2),y    ;put in user
38	sta cinv,y      ;put in storage
39	dey
40	bpl movos1
41	rts
42;
43vectss	.word key,timb,nnmi
44	.word nopen,nclose,nchkin
45	.word nckout,nclrch,nbasin
46	.word nbsout,nstop,ngetin
47	.word nclall,timb ;goto break on a usrcmd jmp
48	.word nload,nsave
49vectse
50
51
52memtop	bcc settop
53;
54;carry set--read top of memory
55;
56gettop	ldx memsiz
57	ldy memsiz+1
58	lda rambks
59;
60;carry clear--set top of memory
61;
62settop	sta rambks
63	stx memsiz
64	sty memsiz+1
65	rts
66
67;manage bottom of memory
68;
69membot	bcc setbot
70;
71;carry set--read bottom of memory
72;
73	ldx memstr
74	ldy memstr+1
75;
76;carry clear--set bottom of memory
77;
78setbot	stx memstr
79	sty memstr+1
80	rts
81
82;
83;return address of first 6522
84;
85iobase
86	ldx #<via1
87	ldy #>via1
88	rts
89