annotate level2/modules/os9p1.asm @ 310:4df2bcadf651

Renamed compatibility byte to feature byte
author boisy
date Tue, 23 Jul 2002 13:54:36 +0000
parents a17a5e753f14
children b3bfa479f8d0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1 ********************************************************************
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2 * OS9p1 - OS-9 Level Two V3 P1 module
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
3 *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
4 * $Id$
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
5 *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
6 * Ed. Comments Who YY/MM/DD
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
7 * ------------------------------------------------------------------
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
8 * ?? Cleaned up some formatting KDM 87/05/15
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
9 * ?? Added comments and added new defines KDM 87/03/31
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
10 * 18a Added time of creation to process descriptor BRI 88/11/18
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
11 * 18b Added F$AllTsk call error exit to F$Chain BRI 88/12/05
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
12 * 18c Changed time tag to use F$Time - No ticks BRI 88/12/08
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
13 * 18h Removed bogus assumptions regarding init BGP 98/10/05
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
14 * module in order to shrink code size, added
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
15 * check for CRC bit in compabibility byte of
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
16 * init module.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
17 * 18i Made minor optimizations as per Curtis Boyle's BGP 98/10/10
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
18 * optimization document
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
19
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
20 nam OS9p1
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
21 ttl OS9 Level Two V3 P1 module
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
22
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
23 * FastBoot flag turns off module CRC checking during boot
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
24 FastBoot equ 1
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
25
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
26 ifp1
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
27 use defsfile
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
28 use scfdefs
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
29 endc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
30
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
31 rev set $09
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
32 edition set 18
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
33
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
34 mod eom,name,Systm,ReEnt+rev,entry,msiz ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
35
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
36 org $0000
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
37 msiz equ .
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
38
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
39 name fcs "OS9p1"
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
40 fcb edition
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
41
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
42 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
43 * OS9p1 begins here:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
44 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
45 entry ldx #$100 clear rest of first 8k Block: ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
46 ldy #8192-$100 ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
47 clra
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
48 clrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
49 L001C std ,x++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
50 leay -2,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
51 bne L001C
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
52
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
53 inca
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
54 std D.Tasks =$0100 task flags (32)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
55 addb #$20 (DAT.TkCt) ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
56 std D.TskIPt =$0120 temporary images ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
57
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
58 inca
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
59 aslb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
60 std D.BlkMap+2 =$0240 end of block map
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
61 clrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
62 std D.BlkMap =$0200 mem block map (64)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
63
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
64 inca ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
65 std D.SysDis =$0300 sys dispatch table
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
66 inca
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
67 std D.UsrDis =$0400 usr dispatch table
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
68 inca
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
69 std D.PrcDBT =$0500 proc desc pointers
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
70 inca
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
71 std D.SysPrc =$0600 original sys proc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
72 std D.Proc =$0600 original proc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
73 adda #P$Size/256 desc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
74 tfr d,s SP=$0800 sys SP within sys desc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
75 inca
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
76 std D.SysStk =$0900 main sys stack ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
77 std D.SysMem =$0900 sys memmap
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
78 inca
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
79 std D.ModDir =$0A00 module dir
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
80 std D.ModEnd =$0A00 (grows upward)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
81 adda #$06
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
82 std D.ModDir+2 =$1000 module DAT images
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
83 std D.ModDAT =$1000 (grows downward)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
84 std D.CCMem =$1000 CC3IO static memory ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
85
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
86 asla d=$2000 GrfDrv stack area ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
87
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
88 std D.CCStk ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
89
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
90 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
91 leax Vectors,pcr put jmp[,x] vectors:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
92 tfr x,d
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
93 ldx #D.SWI3
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
94
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
95 * used by top 256 to jmp to sys.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
96
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
97 L0065 std ,x++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
98 cmpx #D.NMI
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
99 bls L0065
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
100
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
101 leax >eo,pcr move secondary vectors
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
102 pshs x from end of rom:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
103 leay >D.VECTRS,pcr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
104 ldx #D.Clock (Tick-NMI)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
105 L0079 ldd ,y++ get vector
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
106 addd ,s add offset
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
107 std ,x++ store
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
108 cmpx #D.XNMI done?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
109 bls L0079 ..no
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
110 leas 2,s drop offset
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
111
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
112 ldx D.XSWI2 set calls to sys
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
113 stx D.UsrSvc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
114 ldx D.XIRQ set IRQ to sys
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
115 stx D.UsrIRQ
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
116
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
117 leax SysCall,pcr set syscall handler
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
118 stx D.SysSvc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
119 stx D.XSWI2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
120
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
121 leax S.SysIRQ,pcr set sysirq handler
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
122 stx D.SysIRQ
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
123 stx D.XIRQ
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
124
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
125 leax >S.SvcIRQ,pcr IRQ svc handler
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
126 stx D.SvcIRQ
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
127 leax >S.POLL,pcr default poll 'til IOMan
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
128 stx D.Poll
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
129 leax S.AltIRQ,pcr default keyboard till CC3io ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
130 stx D.AltIRQ ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
131 leax S.Flip0,pcr Grfdrv return vector ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
132 stx D.Flip0 ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
133 leax S.Flip1,pcr GrfDrv exec vector ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
134 stx D.Flip1 ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
135
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
136 leay SysCalls,pcr enter os9p1 svc calls:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
137 lbsr InstSSvc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
138
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
139 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
140 ldu D.PrcDBT set up first proc desc:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
141 ldx D.SysPrc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
142 stx 0,u proc table entries
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
143 stx 1,u zero and one
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
144
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
145 lda #1 sys proc id=01
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
146 sta P$ID,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
147 lda #SysState set sys state
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
148 sta P$State,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
149 lda #SysTask sys task # ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
150 sta D.SysTsk
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
151 sta P$Task,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
152 * optimization below saves one byte
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
153 ldd #$FFFF top priority/age
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
154 std P$Prior,x store it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
155 * lda #$FF
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
156 * sta P$Prior,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
157 * sta P$Age,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
158
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
159 leax P$DATImg,x point sysdat -> sys proc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
160 stx D.SysDAT
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
161 clra
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
162 clrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
163 std ,x++ first block always sys
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
164
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
165 * DAT.BlCt-ROMCount-RAMCount:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
166 ldy #6 next 6 are unused ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
167 ldd #DAT.Free
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
168 L00EF std ,x++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
169 leay -1,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
170 bne L00EF
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
171
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
172 ldd #IOBlock last one is Kernel ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
173 std ,x++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
174
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
175 ldx D.Tasks first task# is sys's
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
176 inc 0,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
177 inc 1,x Task 1 is GrfDrv ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
178
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
179 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
180 * set 1st 8K sys mem used
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
181 ldx D.SysMem
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
182 ldb D.CCStk (=$20) ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
183 L0104 inc ,x+
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
184 decb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
185 bne L0104
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
186
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
187 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
188 * determine size of CoCo's memory (128K/512K)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
189 clr D.MemSz default is 128k ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
190 ldd #$0313 blocks $03 and $13 ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
191 std DAT.Regs+5 map at logical $A000 ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
192 ldx #$A000 point to first block ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
193 ldd #$DC78 get inverted sync bytes ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
194 std ,x store at start of first block ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
195 cmpd 8192,x in second block too? ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
196 beq L0122 yes, just 128k ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
197 inc D.MemSz else set 512k flag ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
198
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
199 L0122 ldy #$2000 point to second block in map ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
200 ldx D.BlkMap X=$0200
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
201
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
202 * Check Memory Blocks Loop:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
203
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
204 L0128 pshs x save current map pointer
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
205 ldd ,s D=map ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
206 subd D.BlkMap D=block number
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
207 cmpb #IOBlock is it sys?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
208 bne L0136 ..no, test for 512k ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
209 ldb #RAMinUse load marker ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
210 bra L015B go set in map ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
211
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
212 L0136 lda D.MemSz 512k memory? ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
213 bne L013E yes, continue ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
214 cmpb #$0F end of 128k mem? ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
215 bhs L0159 yes, set notram ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
216
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
217 L013E stb >DAT.Regs+1 set block at $2000 for test ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
218 ldu ,y get two bytes
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
219 ldx #$00FF store test bytes
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
220 stx ,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
221 cmpx ,y same on read
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
222 bne L0159 ..end if no mem here
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
223
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
224 ldx #$FF00 make sure again
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
225 stx ,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
226 cmpx ,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
227 bne L0159 ..bad mem
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
228 stu ,y restore original bytes
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
229 bra L015D do next
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
230
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
231 * End of Memory:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
232
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
233 L0159 ldb #NotRAM set non-mem flag
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
234
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
235 L015B stb [,s] store at ,X in table ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
236
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
237 L015D puls x get current map pointer
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
238 leax 1,x next block
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
239 cmpx D.BlkMap+2 end of map?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
240 blo L0128 ..no, keep trying
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
241
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
242 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
243 * Search For ROM Modules:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
244
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
245 ldx D.BlkMap X=map strt (X=$0200)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
246 inc ,x mark as RAMinUse
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
247 ldx D.BlkMap+2 start at end of map (X=$0240)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
248
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
249 leax -1,x back up 1 (X=$023F)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
250
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
251 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
252 tfr x,d else D=block number (D=$023F)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
253 subd D.BlkMap make into block number (D=$003F)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
254
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
255 pshs d save block number
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
256 leay ,s Y = var pointer for routine below
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
257
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
258 ldx #$0D00 offset in block ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
259
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
260 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
261 * Check Block for Modules Loop:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
262
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
263 L017F pshs x,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
264 lbsr L0AF0 set up Y for X offset
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
265 ldb 1,y B=block# from image
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
266 stb >DAT.Regs map into sys zero
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
267 lda ,x get byte from block
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
268 clr >DAT.Regs back to sys
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
269 puls x,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
270 cmpa #M$ID1 module?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
271 bne L01A7
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
272
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
273 lbsr L0463 do verify
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
274 bcc L019D
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
275 cmpb #E$KwnMod 'Known Module'?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
276 bne L01A7 ..no, continue
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
277 L019D ldd #M$Size else get mod size
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
278 lbsr lddxy
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
279 leax d,x skip over it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
280 bra L01A9
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
281
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
282 * Not Known Module:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
283
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
284 L01A7 leax 1,x byte ptr+1
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
285
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
286 L01A9 cmpx #$1E00 don't overrun vector page! ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
287 blo L017F ok to continue ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
288 bsr L01D2 setup system mem map ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
289
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
290 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
291 * OS9p1 init finished:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
292
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
293 L01B0 os9 F$Boot boot!
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
294 bcs Crash crash if problem
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
295 leax InitMod,pcr 'Init'
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
296 bsr LinkSys link to it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
297 bcs Crash crash if error
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
298 L01BF stu D.Init save Init ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
299 L01C1 leax OS9p2Nm,pcr 'OS9p2'
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
300 bsr LinkSys link to it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
301 bcs Crash crash if not found...
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
302 L01D0 jmp ,y ...else do OS9p2...
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
303 Crash jmp D.Crash report boot failed
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
304
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
305 * Setup system memory map.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
306
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
307 L01D2 ldx D.SysMem point to map ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
308 leax $ED00/256,x kernel offset in map ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
309 lda #NotRam mark IOPage ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
310 sta 18,x as Not RAM ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
311 ldb #$12 18 pages in kernel ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
312
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
313 L01DF lda #RAMinUse mark kernel ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
314
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
315 L01E1 sta ,x+ RAM as in use ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
316 decb all done ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
317 bne L01E1 no, continue
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
318 ldx D.BlkMap+2 end of map++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
319 sta -1,x mark block #3F ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
320 rts exit ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
321
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
322 * Link to Module (X = ptr to mod name):
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
323 LinkSys lda #Systm system module
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
324 os9 F$Link try to find it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
325 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
326
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
327 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
328 * System Service Calls
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
329 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
330 SysCalls fcb F$Link
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
331 fdb FLink-*-2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
332 fcb F$PrsNam
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
333 fdb FPrsNam-*-2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
334 fcb F$CmpNam
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
335 fdb FCmpNam-*-2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
336 fcb F$CmpNam+$80 (sys)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
337 fdb SCmpNam-*-2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
338 fcb F$CRC
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
339 fdb FCRC-*-2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
340 fcb F$SRqMem+$80
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
341 fdb FSRqMem-*-2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
342 fcb F$SRtMem+$80
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
343 fdb FSRtMem-*-2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
344 fcb F$AProc+$80
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
345 fdb FAProc-*-2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
346 fcb F$NProc+$80
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
347 fdb FNProc-*-2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
348 fcb F$VModul+$80
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
349 fdb FVModul-*-2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
350 fcb F$SSvc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
351 fdb FSSvc-*-2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
352 fcb F$SLink+$80
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
353 fdb FSLink-*-2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
354 fcb F$Boot+$80
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
355 fdb FBoot-*-2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
356 fcb F$BtMem+$80
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
357 fdb FBtMem-*-2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
358 fcb F$Move+$80
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
359 fdb FMove-*-2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
360 fcb F$AllRam
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
361 fdb FAllRam-*-2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
362 fcb F$AllImg+$80
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
363 fdb FAllImg-*-2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
364 fcb F$SetImg+$80
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
365 fdb FSetImg-*-2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
366 fcb F$FreeLB+$80
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
367 fdb FFreeLB-*-2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
368 fcb F$FreeHB+$80
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
369 fdb FFreeHB-*-2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
370 fcb F$AllTsk+$80
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
371 fdb FAllTsk-*-2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
372 fcb F$DelTsk+$80
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
373 fdb FDelTsk-*-2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
374 fcb F$SetTsk+$80
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
375 fdb FSetTsk-*-2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
376 fcb F$ResTsk+$80
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
377 fdb FResTsk-*-2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
378 fcb F$RelTsk+$80
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
379 fdb FRelTsk-*-2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
380 fcb F$DATLog+$80
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
381 fdb FDATLog-*-2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
382 fcb F$LDAXY+$80
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
383 fdb FLDAXY-*-2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
384 fcb F$LDDDXY+$80
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
385 fdb FLDDDXY-*-2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
386 fcb F$LDABX+$80
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
387 fdb FLDABX-*-2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
388 fcb F$STABX+$80
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
389 fdb FSTABX-*-2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
390 fcb F$ELink+$80
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
391 fdb FELink-*-2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
392 fcb F$FModul+$80
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
393 fdb FFModul-*-2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
394 fcb F$AlHRam+$80 new call ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
395 fdb FAlHRam-*-2 for CoCo3 ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
396 fcb $80 End of Table
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
397
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
398 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
399 InitMod fcs "Init"
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
400 OS9p2Nm fcs "OS9p2"
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
401 BootMod fcs "Boot"
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
402
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
403 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
404 Vectors jmp [-16,x] goto irq routine
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
405
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
406 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
407 * User State SWI Vectors:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
408 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
409
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
410 XSWI3 ldx D.Proc proc desc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
411 ldu P$SWI3,x diff swi3 vector?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
412 beq L028E ..no, do normal
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
413
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
414 L027B lbra L0E5E else do usr call.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
415
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
416 XSWI2 ldx D.Proc X=proc desc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
417 ldu P$SWI2,x swi2 svc ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
418 beq L028E ..zero, do normal
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
419 bra L027B else do usr map
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
420
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
421 XSWI ldx D.Proc proc desc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
422 ldu P$SWI,x swi ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
423 bne L027B ..do user, else:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
424
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
425 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
426 * System SWI calls: (X=pd, U=svc)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
427
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
428 L028E ldd D.SysSvc set system state:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
429 std D.XSWI2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
430 ldd D.SysIRQ
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
431 std D.XIRQ
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
432 lda P$State,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
433 ora #SysState
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
434 sta P$State,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
435
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
436 sts P$SP,x and save user stack
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
437 leas P$Stack-R$Size,x get local sys stack
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
438 andcc #^IntMasks okay interrupts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
439 leau ,s U=sys reg stack
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
440 bsr L02CB copy user stack here
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
441
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
442 ldb P$Task,x B=task#
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
443 ldx R$PC,u X=PC ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
444 lbsr FLDBBX get call byte from user map ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
445 leax 1,x increment PC
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
446 stx R$PC,u past call
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
447
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
448 ldy D.UsrDis Y=user dispatch table
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
449 lbsr L033B do the call
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
450 ldb R$CC,u okay interrupts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
451 andb #^IntMasks on return
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
452 stb R$CC,u to user map
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
453
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
454 ldx D.Proc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
455 bsr L02DA copy back new user stack
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
456 lda P$State,x drop sys state
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
457 anda #^SysState
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
458 lbra L0D7C and return to user.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
459
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
460 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
461 * Get Caller's Regs:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
462
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
463 L02CB pshs cc,x,y,u ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
464 ldb P$Task,x A=user tsk# ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
465 ldx P$SP,x X=from user stack
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
466 lbsr L0BF5 get offset in 8k space ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
467 leax $A000,x +$A000 =logical address ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
468 bra L02E9 get regs & rts.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
469
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
470 * Return Regs to Caller:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
471
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
472 L02DA pshs cc,x,y,u save state ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
473 ldb P$Task,x B=user tsk#
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
474 ldx P$SP,x X=to user stack
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
475 lbsr L0BF5 get offset in 8k space ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
476 leax $A000,x +$A000 =logical address ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
477 exg x,u U=user, X=sys
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
478
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
479 * move caller stack -->
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
480
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
481 L02E9 pshs u save U ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
482 lbsr L0C09 get DAT image pointer in U ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
483 leau a,u point to block # in image ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
484 leau 1,u point to LSB ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
485 * lda ,u++ first block # in A ++ --BGP
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
486 * ldb ,u second block # in B ++ --BGP
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
487 lda ,u first block # in A ++ ++BGP
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
488 ldb 2,u second block # in B ++ ++BGP
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
489 ldu #DAT.Regs+5 $A000 logical ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
490 orcc #IntMasks mask interrupts ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
491 std ,u set DAT ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
492 puls u recover U ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
493 ldy #R$SIZE register stack size ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
494
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
495 L0303 ldd ,x++ move them ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
496 std ,u++ ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
497 leay -2,y done yet? ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
498 bne L0303 no, continue ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
499 ldx D.SysDAT system DAT image ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
500 lda 11,x get real ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
501 ldb 13,x system blocks ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
502 std DAT.Regs+5 and restore system map ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
503 puls cc,x,y,u,pc clean up and rts ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
504
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
505 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
506 * Sys State OS Call:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
507 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
508 SysCall leau ,s U=reg stack
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
509 lda D.SSTskN get task image ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
510 clr D.SSTskN set to system ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
511 pshs a save old task # ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
512 lda R$CC,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
513 tfr a,cc set CC=user CC
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
514 ldx R$PC,u get call
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
515 ldb ,s is task sys? ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
516 beq L032F yes ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
517 lbsr FLDBBX get call from user space ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
518 leax 1,x point past it ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
519 bra L0331 set as PC ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
520
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
521 L032F ldb ,x+ and increment PC
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
522
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
523 L0331 stx R$PC,u past it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
524 ldy D.SysDis Y=system dispatch table
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
525 bsr L033B do the call
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
526 lbra L0E2B end
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
527
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
528 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
529 * Do Svc Call(B), Y=table:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
530
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
531 L033B aslb index
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
532 bcc L0345 ..okay if not I/O
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
533
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
534 * count I$ calls for current process (D.Proc)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
535 pshs b save index into table
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
536 ldb #P$ICalls set up I$ counter
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
537 bsr IncCount go do it... (X is altered)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
538 puls b recover index
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
539
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
540 rorb else reset B
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
541 ldx $00FE,y else X=IOMan vector
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
542 bra L034F and do it.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
543
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
544 * count User Ticks, System Ticks, F$ calls, or I$ calls
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
545 * for current process (D.Proc) BRI
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
546 IncCount ldx <D.Proc get pointer to current proc desc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
547 beq IncExit no current proc, go return
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
548 abx add offset to appropriate counter
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
549 inc 3,x 4 byte counter LSB
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
550 bne IncExit no overflow, go return
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
551 inc 2,x 4 byte counter lower middle byte
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
552 bne IncExit no overflow, go return
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
553 inc 1,x 4 byte counter upper middle byte
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
554 bne IncExit no overflow, go return
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
555 inc ,x 4 byte counter MSB (ignore overflow)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
556 IncExit rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
557
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
558 * (not I/O call)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
559
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
560 L0345 pshs b save index into table
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
561 ldb #P$FCalls set up F$ counter
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
562 bsr IncCount go do it... (X is altered)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
563 puls b recover index
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
564
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
565 clra A=00
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
566 ldx d,y X=vector from table
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
567 bne L034F ..ok if one
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
568 comb else
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
569 ldb #E$UnkSvc 'Unknown Service Call'
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
570 bra L0355 bad end: return err
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
571
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
572 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
573 * Do Call Vector (X)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
574
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
575 L034F pshs u save reg ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
576 jsr ,x do the call
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
577 puls u retrieve reg ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
578
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
579 L0355 tfr cc,a A=svc call CC
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
580 bcc L035B ..skip if no err
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
581 stb R$B,u else return err in reg.B
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
582 L035B ldb R$CC,u drop lsb nibble
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
583 andb #(Entire!IntMasks)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
584 stb R$CC,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
585 anda #^(Entire!IntMasks) put in call's CC lsnibble
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
586 ora R$CC,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
587 sta R$CC,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
588 rts end service call.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
589
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
590
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
591 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
592 * F$SSvc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
593 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
594 FSSvc ldy R$Y,u Y=table address
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
595 bra InstSSvc do check first...
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
596
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
597 * SSvc Loop:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
598
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
599 L036D clra A=00
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
600 aslb B=table index (set C if >=$80)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
601 tfr d,u U=index
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
602 ldd ,y++ D=new call vector offset
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
603 leax d,y X=actual vector
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
604 ldd D.SysDis D=sys dispatch table
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
605 stx d,u store new call vector
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
606 bcs InstSSvc ..skip if sys only
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
607 ldd D.UsrDis else put in user
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
608 stx d,u dispatch table also.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
609
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
610 * End of Table Check:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
611
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
612 InstSSvc ldb ,y+ get next call
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
613 cmpb #$80 is it end-of-table?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
614 bne L036D ..no
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
615 rts yes, end.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
616
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
617
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
618 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
619 * F$SLink
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
620 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
621 * Link modules into map.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
622 * A=type,X=name,Y=DAT image ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
623 FSLink ldy R$Y,u get DAT image ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
624 bra SLink
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
625
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
626
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
627 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
628 * F$ELink
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
629 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
630 FELink pshs u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
631 ldb R$B,u type
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
632 ldx R$X,u name of module
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
633 bra L03AF go link it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
634
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
635
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
636 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
637 * F$Link
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
638 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
639 FLink ldx D.Proc proc desc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
640 leay P$DATImg,x Y=DAT image ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
641
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
642 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
643 SLink pshs u save reg ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
644 ldx R$X,u X=module name
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
645 lda R$A,u A=module type
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
646 lbsr L068D search moddir
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
647
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
648 bcs L041E ..err
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
649
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
650 leay ,u Y=moddir entry
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
651 ldu ,s get back reg ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
652 stx R$X,u return X
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
653 std R$D,u return type/lang
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
654 leax ,y X=moddir entry
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
655
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
656 L03AF bitb #ReEnt is it shareable?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
657 bne L03BB ..yes
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
658 ldd MD$Link,x any links?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
659 beq L03BB ..no:ok, else
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
660 ldb #E$ModBsy 'Module Busy' err
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
661 bra L041E bad end.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
662
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
663 L03BB ldd MD$MPtr,x D=module ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
664 pshs a,b,x save ptr,entry
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
665 ldy MD$MPDAT,x Y=DAT img for module
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
666 ldd MD$MBSiz,x D=mem block size
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
667 addd #$1FFF round up A ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
668 tfr a,b to 8K block ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
669 lsrb B/32
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
670 lsrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
671 lsrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
672 lsrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
673 lsrb ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
674 adda #2 (A+2)/32 ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
675 lsra
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
676 lsra
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
677 lsra
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
678 lsra
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
679 lsra ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
680 pshs a save blocks needed
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
681 leau ,y U=moddir entry
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
682 bsr L0422 find it in callers map?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
683 bcc L03EB ..yes
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
684
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
685 lda ,s blocks needed
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
686 lbsr L0A33 room to map in?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
687 bcc L03E8 ..okay
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
688 leas 5,s else drop junk
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
689 bra L041E bad end.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
690
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
691 L03E8 lbsr L0A8C set DAT image
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
692 L03EB leax P$Links,x link cnt tble
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
693 sta ,s save block #
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
694 asla index
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
695 leau a,x U=link ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
696 ldx ,u increment link cnt:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
697 leax 1,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
698 beq L03FC
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
699 stx ,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
700 L03FC ldu 3,s U=moddir entry
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
701 ldx MD$Link,u increment link cnt:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
702 leax 1,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
703 beq L0406
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
704 stx MD$Link,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
705 L0406 puls b,x,y,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
706 lbsr L0AB0 dattolog
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
707 stx R$U,u return module addrss
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
708 ldx MD$MPtr,y mod ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
709 ldy MD$MPDAT,y DAT image ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
710 ldd #M$Exec get exec offset
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
711 lbsr LDDXY
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
712 addd R$U,u plus mod addrss
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
713 std R$Y,u = exec address
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
714 clrb okay
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
715 rts end.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
716
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
717 L041E orcc #Carry set error
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
718 puls u,pc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
719
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
720 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
721 * See if moddir image in proc map already:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
722 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
723
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
724 * B=block img #, U=moddir ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
725
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
726 L0422 ldx D.Proc proc desc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
727 leay P$DATImg,x Y=DAT image ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
728 clra A=00
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
729 pshs a,b,x,y save #,proc,img
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
730 subb #DAT.BlCt
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
731 negb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
732 aslb index
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
733 leay b,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
734
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
735 * Image Compare Loop:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
736
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
737 L0430 ldx ,s X=block cnt
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
738 pshs y,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
739 L0434 ldd ,y++ does proc img
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
740 cmpd ,u++ match mod image?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
741 bne L0449 ..no
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
742 leax -1,x yes, cnt-1
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
743 bne L0434 ..done?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
744
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
745 puls a,b,u D=start ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
746 subd 4,s -block cnt = offset
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
747 lsrb B/2 index
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
748 stb ,s save block #
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
749 clrb okay
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
750 puls a,b,x,y,pc rts.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
751
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
752 L0449 puls y,u Y=start ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
753 leay -2,y back up one img
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
754 cmpy 4,s too far?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
755 bcc L0430 ..no, try again
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
756 puls a,b,x,y,pc error end.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
757
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
758
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
759 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
760 * F$VModul
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
761 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
762 FVModul pshs u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
763 ldx R$X,u X=mod offset
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
764 ldy R$D,u Y=DAT img ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
765 bsr L0463 do the verify
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
766 ldx ,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
767 stu R$U,x return moddir ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
768 puls u,pc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
769
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
770 L0463 pshs x,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
771 lbsr L0586 check module crc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
772 bcs L0493 ..err
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
773
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
774 ldd #M$Type
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
775 lbsr LDDXY get type/rev bytes
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
776 andb #$0F save rev
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
777 pshs a,b
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
778
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
779 ldd #M$Name get name offset
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
780 lbsr LDDXY
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
781 leax d,x X points to mod name
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
782 puls a
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
783 lbsr L068D
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
784 puls a
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
785 bcs L0497
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
786
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
787 pshs a
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
788 andb #$0F
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
789 subb ,s+
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
790 bcs L0497
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
791 ldb #E$KwnMod 'Known Module'
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
792 bra L0493
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
793
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
794 L0491 ldb #E$DirFul 'Module Dir Full'
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
795 L0493 orcc #Carry
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
796 puls x,y,pc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
797
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
798 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
799 L0497 ldx ,s X=module addrss
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
800 lbsr L0524
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
801 bcs L0491
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
802 sty MD$MPDAT,u insert DAT image ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
803 stx MD$MPtr,u and module ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
804 clra
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
805 clrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
806 std MD$Link,u link count=00
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
807 ldd #M$Size
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
808 lbsr LDDXY get module size
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
809 pshs x mod addrss
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
810 addd ,s++ plus size
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
811 std MD$MBSiz,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
812 ldy [MD$MPDAT,u] Y=mod images
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
813 ldx D.ModDir X=mod dir strt
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
814 pshs u save entry
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
815 bra L04BE
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
816
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
817 L04BC leax MD$ESize,x next moddir entry
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
818 L04BE cmpx D.ModEnd last one?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
819 bcc L04CD ..yes, end
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
820 cmpx ,s same entry?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
821 beq L04BC ..yes, try again
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
822 cmpy [,x] same image ptr?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
823 bne L04BC ..no, try again
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
824 bsr L04F2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
825
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
826 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
827 * Mark BlockMaps as Modules:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
828
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
829 L04CD puls u U=dir entry
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
830 ldx D.BlkMap X=mem block map
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
831 ldd MD$MBSiz,u D=mod block size
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
832 addd #$1FFF round up size ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
833 lsra A/32 = number of blocks
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
834 lsra (8K)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
835 lsra
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
836 lsra
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
837 lsra ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
838 ldy MD$MPDAT,u Y=mod dat image
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
839
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
840 L04DE pshs a,x save block size, blkmap
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
841 ldd ,y++ D=image block#
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
842 leax d,x X=blkmap ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
843 ldb ,x get block marker
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
844 orb #ModBlock set module in block
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
845 stb ,x marker
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
846 puls a,x ..
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
847 deca count-1
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
848 bne L04DE ..mark all blocks
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
849
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
850 clrb okay
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
851 puls x,y,pc end.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
852
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
853 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
854 * Clear entries:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
855
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
856 L04F2 pshs a,b,x,y,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
857 ldx ,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
858 pshs x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
859 clra D=0000
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
860 clrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
861 L04FA ldy ,x last entry?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
862 beq L0503 ..yes
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
863 std ,x++ no, clear
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
864 bra L04FA and loop
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
865
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
866 L0503 puls x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
867 ldy 2,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
868 ldu MD$MPDAT,u U=mod images
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
869 puls a,b
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
870
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
871 L050C cmpx ,y same image?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
872 bne L051B ..no, try next
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
873 stu MD$MPDAT,y yes, set new image
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
874 cmpd MD$MBSiz,y new size bigger?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
875 bcc L0519 ..yes, use it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
876 ldd MD$MBSiz,y else use old size
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
877 L0519 std MD$MBSiz,y set modblock size
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
878 L051B leay MD$ESize,y next entry
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
879 cmpy D.ModEnd last?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
880 bne L050C ..no
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
881 puls x,y,u,pc end.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
882
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
883 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
884 L0524 pshs x,y,u save mod adrs,img,
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
885 ldd #M$Size get module size
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
886 lbsr LDDXY
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
887 addd ,s end = begin+size
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
888 addd #$1FFF round to block ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
889 lsra A/32
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
890 lsra
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
891 lsra
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
892 lsra
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
893 lsra ++,
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
894 tfr a,b A,B=number of blocks
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
895 pshs b save num
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
896 incb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
897 aslb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
898 negb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
899 sex sign extend into D
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
900 bsr L054E make new dir entry
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
901 bcc L054C ..okay rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
902
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
903 os9 F$GCMDir else get task#
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
904 ldu #$0000 set flag
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
905 stu 5,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
906 bsr L054E make new dir entry
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
907 L054C puls b,x,y,u,pc rts.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
908
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
909 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
910 * Allocate module dir image:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
911
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
912 L054E ldx D.ModDAT X+D = mod DAT img pointer
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
913 leax d,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
914 cmpx D.ModEnd would it be below last dir?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
915 bcs L0583 ..yes, err
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
916
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
917 ldu 7,s get back old U
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
918 bne L056E ..
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
919 pshs x save new moddat ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
920 ldy D.ModEnd Y=end of dir
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
921 leay MD$ESize,y plus new entry
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
922 cmpy ,s++ collide with moddat?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
923 bhi L0583 ..yes, err
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
924
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
925 sty D.ModEnd store new dir end
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
926 leay -MD$ESize,y Y=new dir entry ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
927 sty 7,s return it to caller
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
928 L056E stx D.ModDAT store new moddat ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
929 ldy 5,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
930 ldb 2,s B=block count
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
931 stx 5,s return dir datimg ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
932
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
933 L0577 ldu ,y++ copy images
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
934 stu ,x++ to new mod dat entry
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
935 decb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
936 bne L0577
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
937
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
938 clr ,x zero flag
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
939 clr 1,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
940 rts end.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
941
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
942 L0583 orcc #Carry set err flag
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
943 rts end.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
944
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
945
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
946 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
947 * Calculate CRC of Module:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
948 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
949
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
950 L0586 pshs x,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
951 clra D=offset of zero
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
952 clrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
953 lbsr LDDXY get 2 bytes
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
954 cmpd #M$ID12 is it module?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
955 beq L0597 ..yes
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
956 ldb #E$BMID 'Bad Module Header'
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
957 bra L05F3 ..err end.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
958
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
959 * Check Module Header:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
960
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
961 L0597 leas -1,s make var
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
962 leax 2,x X=past sync bytes
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
963 lbsr L0AF0 set Y for X offset
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
964 ldb #$07 seven bytes
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
965 lda #$4A header crc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
966 L05A2 sta ,s save crc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
967 lbsr LDAXY get next byte
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
968 eora ,s do crc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
969 decb more?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
970 bne L05A2 ..loop
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
971
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
972 leas 1,s drop var
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
973 inca $FF+1 = 00
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
974 beq L05B5 ..okay header
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
975 ldb #E$BMHP 'Bad Module Header'
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
976 bra L05F3 err end.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
977
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
978 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
979 * Do CRC across module:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
980 *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
981 * Added code to check init module for CRC check flag
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
982 L05B5
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
983 ldx D.Init get Init module addr ++ BGP
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
984
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
985 * Here the FastBoot definition says that if the INIT module cannot
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
986 * be found (as is the case when OS9p1 brings up the rest of the
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
987 * system with F$Boot), then don't do CRC checking. Note that
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
988 * module header checking above is still performed in this case.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
989 ifeq FastBoot
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
990 beq L05CX if none, do CRC checking ++ BGP
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
991 else
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
992 beq NOCRC if none, DON'T DO CRC checking ++ BGP
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
993 endc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
994
309
a17a5e753f14 Changed compatibility byte to feature byte in init
boisy
parents: 0
diff changeset
995 lda Feature1,x get compat1 byte ++BGP
0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
996 bita #CRCOn test CRCOn bit ++BGP
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
997 bne L05CX if set, check CRC ++BGP
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
998 NOCRC clra else clra ++BGP
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
999 clrb and clrb ++BGP
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1000 bra L05F5 branch to end of routine ++BGP
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1001 L05CX puls x,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1002 ldd #$0002
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1003 lbsr LDDXY
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1004 pshs a,b,x,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1005 ldd #$FFFF set temp CRC register
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1006 pshs a,b
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1007 pshs b
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1008 lbsr L0AF0 set up Y for X offset
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1009 leau ,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1010 L05CB tstb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1011 bne L05D8
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1012 pshs x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1013 ldx #$0001
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1014 os9 F$Sleep
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1015 puls x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1016 L05D8 lbsr LDAXY get a byte
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1017 bsr CRCCalc pass it through the CRC calculator
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1018 ldd 3,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1019 subd #$0001
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1020 std 3,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1021 bne L05CB
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1022 puls b,x,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1023 cmpb #$80
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1024 bne L05F1
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1025 cmpx #$0FE3
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1026 beq L05F5
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1027 L05F1 ldb #E$BMCRC 'Bad Module CRC'
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1028 L05F3 orcc #Carry
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1029 L05F5 puls x,y,pc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1030
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1031 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1032 * CRC Calculator:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1033 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1034
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1035 * A = byte to be passed through accumulator
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1036 CRCCalc eora ,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1037 pshs a
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1038 ldd 1,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1039 std ,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1040 clra
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1041 ldb ,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1042 aslb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1043 rola
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1044 eora 1,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1045 std 1,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1046 clrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1047 lda ,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1048 lsra
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1049 rorb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1050 lsra
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1051 rorb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1052 eora 1,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1053 eorb 2,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1054 std 1,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1055 lda ,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1056 asla
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1057 eora ,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1058 sta ,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1059 asla
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1060 asla
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1061 eora ,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1062 sta ,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1063 asla
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1064 asla
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1065 asla
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1066 asla
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1067 eora ,s+
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1068 bpl L0635
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1069 ldd #$8021
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1070 eora ,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1071 sta ,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1072 eorb 2,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1073 stb 2,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1074 L0635 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1075
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1076 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1077 * F$CRC
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1078 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1079 FCRC ldd R$Y,u get byte count
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1080 beq L0677 ..zero
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1081 ldx R$X,u begin ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1082 pshs a,b,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1083 leas -3,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1084 ldx D.Proc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1085 lda P$Task,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1086 ldb D.SysTsk
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1087 ldx R$U,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1088 ldy #$0003
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1089 leau ,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1090 pshs a,b,x,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1091 lbsr L0B2C
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1092 ldx D.Proc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1093 leay P$DATImg,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1094 ldx 11,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1095 lbsr L0AF0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1096 L065D lbsr LDAXY
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1097 bsr CRCCalc pass byte through CRC calculator
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1098 ldd 9,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1099 subd #$0001
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1100 std 9,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1101 bne L065D
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1102 puls a,b,x,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1103 exg a,b
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1104 exg x,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1105 lbsr L0B2C
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1106 leas 7,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1107 L0677 clrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1108 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1109
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1110 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1111 * F$FModul
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1112 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1113 * Find the Module named (X) with type (A) in Y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1114 FFModul pshs u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1115 lda R$A,u A=type request
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1116 ldx R$X,u X=name
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1117 ldy R$Y,u Y=DAT image ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1118 bsr L068D find it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1119 puls y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1120 std R$D,y return type/attr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1121 stx R$X,y updated name ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1122 stu R$U,y module offset
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1123 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1124
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1125 L068D ldu #$0000 address flag
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1126 pshs a,b,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1127 bsr L0712 get first char
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1128 cmpa #PDELIM start with pathlist delimiter?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1129 beq L070B ..bad name error
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1130 lbsr L0741
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1131 bcs L070E
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1132 ldu D.ModEnd U=mod end ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1133 bra L0700
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1134
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1135 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1136 * Main Loop:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1137
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1138 L06A1 pshs a,b,x,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1139 pshs x,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1140 ldy MD$MPDAT,u Y=mod images
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1141 beq L06F6
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1142 ldx MD$MPtr,u X=mod ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1143 pshs x,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1144 ldd #M$Name get mod name
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1145 lbsr LDDXY offset
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1146 leax d,x X=name address
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1147 pshs x,y save add,images
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1148 leax 8,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1149 ldb 13,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1150 leay ,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1151 lbsr L07DE
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1152 leas 4,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1153 puls x,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1154 leas 4,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1155 bcs L06FE
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1156 ldd #M$Type get mod type/lang
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1157 lbsr LDDXY
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1158 sta ,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1159 stb 7,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1160 lda 6,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1161 beq L06ED
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1162 anda #$F0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1163 beq L06E1
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1164 eora ,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1165 anda #$F0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1166 bne L06FE
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1167 L06E1 lda 6,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1168 anda #$0F
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1169 beq L06ED
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1170 eora ,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1171 anda #$0F
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1172 bne L06FE
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1173 L06ED puls a,b,x,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1174 abx
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1175 clrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1176 ldb 1,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1177 leas 4,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1178 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1179
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1180 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1181 L06F6 leas 4,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1182 ldd 8,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1183 bne L06FE
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1184 stu 8,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1185 L06FE puls a,b,x,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1186
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1187 * Moved back one ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1188
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1189 L0700 leau -MD$ESize,u next dir entry ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1190 cmpu D.ModDir last one? ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1191 bcc L06A1 ..no, loop ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1192
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1193 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1194 ldb #E$MNF 'Module Not Found'
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1195 bra L070E
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1196
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1197 L070B comb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1198 ldb #E$BNam 'Bad Name' error
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1199 L070E stb 1,s return err code
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1200 puls a,b,u,pc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1201
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1202 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1203 * Get Module Name:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1204
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1205 L0712 pshs y save image strt
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1206 L0714 lbsr L0AF0 point X to name in img(Y)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1207 lbsr L0AC8 get char
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1208 leax 1,x ptr+1
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1209 cmpa #C$SPAC was char space?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1210 beq L0714 ..yes, skip
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1211
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1212 leax -1,x ptr-1
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1213 pshs a save char
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1214 tfr y,d D=image ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1215 subd 1,s -images start
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1216 asrb block#=image/2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1217 lbsr L0AB0 ??
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1218 puls a,y,pc rts.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1219
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1220
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1221 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1222 * F$PrsNam
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1223 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1224 FPrsNam ldx D.Proc proc desc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1225 leay P$DATImg,x Y=DAT image ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1226 ldx R$X,u X=name string
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1227 bsr L0741 get it and length
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1228 std R$D,u return length in D
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1229 bcs L073E ..err
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1230 stx R$X,u and X at name begin
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1231 abx plus len
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1232 L073E stx R$Y,u return Y=end of name ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1233 rts end.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1234
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1235 * Parse Name:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1236
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1237 L0741 pshs y save image ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1238 lbsr L0AF0 find map block
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1239 pshs x,y save X offset within block and Y block pointer
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1240 lbsr LDAXY get A=byte(X)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1241 cmpa #PDELIM is it a pathlist delimiter?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1242 bne L0756 ..no, go keep X offset and block Y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1243 leas 4,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1244 pshs x,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1245 lbsr LDAXY get next char
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1246 L0756 bsr L07A1 go check if valid first character...
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1247 bcs L076A not valid, go get next name start offset in X...
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1248 clrb initialize character counter
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1249 L075B incb incb add one character
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1250 tsta last character in name string?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1251 bmi L0766 yes, go return valid...
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1252 lbsr LDAXY go get next character...
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1253 bsr L078A go check if valid character...
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1254 bcc L075B valid, go check if last character...
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1255 L0766 andcc #^Carry
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1256 bra L077C
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1257
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1258 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1259 L076A cmpa #C$COMA comma?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1260 bne L0775 no, check for next character
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1261 L076E leas 4,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1262 pshs x,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1263 lbsr LDAXY
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1264 L0775 cmpa #C$SPAC is it a space?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1265 beq L076E ..yes, go get next character
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1266 comb error, set Carry
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1267 ldb #E$BNam 'Bad Name' error
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1268 L077C puls x,y recover offset and pointer
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1269 pshs cc,a,b save Carry, character and count or error code
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1270 tfr y,d copy DAT image block pointer
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1271 subd 3,s subtract original DAT image pointer
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1272 asrb convert 2 byte/block count to block number
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1273 lbsr L0AB0 go get true map offset in X...
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1274 puls cc,a,b,y,pc recover registers and return...
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1275
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1276 L078A pshs a save character
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1277 anda #$7F drop msbit
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1278 cmpa #PDIR period?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1279 beq ValidChr yes, go return valid character...
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1280 cmpa #'0 is it control?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1281 bcs InvalChr ..yes
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1282 cmpa #'9 is it number?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1283 bls ValidChr ..yes
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1284 cmpa #'_ is it '_'?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1285 bne L07A5 ..no
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1286 ValidChr clra clear carry
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1287 puls a,pc recover original character and return
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1288
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1289 *----------------------------------------------
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1290 L07A1 pshs a
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1291 anda #$7F drop msbit
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1292 L07A5 cmpa #'A less than "A"?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1293 bcs InvalChr yes, go return invalid character...
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1294 cmpa #'Z less than or equal to "Z"?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1295 bls ValidChr yes, go return valid character
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1296 cmpa #'a less than "a"?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1297 bcs InvalChr yes, go return invalid character
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1298 cmpa #'z less than or equal to "z"?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1299 bls ValidChr yes, go return valid character
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1300 InvalChr coma
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1301 puls a,pc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1302
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1303
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1304 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1305 * F$CmpNam
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1306 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1307 FCmpNam ldx D.Proc proc desc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1308 leay P$DATImg,x Y=caller DAT image ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1309 ldx R$X,u X=first name
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1310 pshs x,y save name,img
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1311 bra L07CF do it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1312
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1313
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1314 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1315 * F$CmpNam (sys)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1316 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1317 SCmpNam ldx D.Proc proc desc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1318 leay P$DATImg,x Y=images
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1319 ldx R$X,u X=first name
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1320 pshs x,y save name,imgs
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1321 ldy D.SysDAT Y=system DAT image ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1322
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1323 L07CF ldx R$Y,u X=second name
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1324 pshs x,y save name2,sysimg
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1325 ldd R$D,u D=match length
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1326 leax 4,s [X]=name1
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1327 leay ,s [Y]=name2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1328 bsr L07DE compare them
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1329 leas 8,s drop vars
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1330 rts end.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1331
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1332 * Compare two strings:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1333
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1334 L07DE pshs a,b,x,y,u length,name1,name2,regs
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1335 ldu 2,s U=name1 ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1336 pulu x,y get name,images
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1337 lbsr L0AF0 set X for img(Y)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1338 pshu x,y save name1 offsets
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1339 ldu 4,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1340 pulu x,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1341 lbsr L0AF0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1342 bra L07F6
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1343
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1344 L07F2 ldu 4,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1345 pulu x,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1346 L07F6 lbsr LDAXY get name2 char
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1347 pshu x,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1348 pshs a save char
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1349 ldu 3,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1350 pulu x,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1351 lbsr LDAXY get name1 char
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1352 pshu x,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1353 eora ,s compare chars
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1354 tst ,s+ check result
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1355 bmi L0816 ..msb diff
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1356 decb len-1
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1357 beq L0813 last?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1358 anda #$DF
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1359 beq L07F2 do next char
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1360
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1361 L0813 comb err
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1362 puls a,b,x,y,u,pc end.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1363
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1364 L0816 decb len-1
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1365 bne L0813 ..err if >0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1366 anda #$5F
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1367 bne L0813
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1368 clrb okay
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1369 puls a,b,x,y,u,pc end.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1370
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1371
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1372 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1373 * F$SRqMem / F$BtMem
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1374 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1375 FSRqMem
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1376 FBtMem ldd R$D,u get # bytes wanted
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1377 addd #$00FF round up
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1378 clrb to page
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1379 std R$D,u return it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1380 ldy D.SysMem Y=system mem map
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1381 leas -2,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1382 stb ,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1383 L082F ldx D.SysDAT X=system DAT image
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1384 aslb index block
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1385 ldd b,x D=DAT marker
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1386 cmpd #DAT.Free is it free?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1387 beq L0847 ..yes
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1388 ldx D.BlkMap else look
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1389 lda d,x at block map byte
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1390 cmpa #RAMinUse is it in use?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1391 bne L0848 ..yes
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1392 leay 32,y leave map ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1393 bra L084F
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1394
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1395 * Free Ram:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1396
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1397 L0847 clra
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1398
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1399 * Ram Not in Use:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1400
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1401 L0848 ldb #32 count=32 pages ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1402 L084A sta ,y+ mark the ram
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1403 decb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1404 bne L084A
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1405
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1406 L084F inc ,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1407 ldb ,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1408 cmpb #DAT.BlCt all blocks done?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1409 bcs L082F
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1410 L0857 ldb R$A,u page count
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1411 L0859 cmpy D.SysMem back to map start?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1412 bhi L0863 ..not yet
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1413 comb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1414 ldb #E$NoRam was MemFul ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1415 bra L0894
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1416
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1417 L0863 lda ,-y free page?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1418 bne L0857 ..no,try again
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1419 decb else got page+1
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1420 bne L0859
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1421 sty ,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1422 lda 1,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1423 lsra
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1424 lsra
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1425 lsra
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1426 lsra
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1427 lsra ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1428 ldb 1,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1429 andb #$1F ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1430 addb R$A,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1431 addb #$1F ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1432 lsrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1433 lsrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1434 lsrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1435 lsrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1436 lsrb ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1437 ldx D.SysPrc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1438 lbsr L09BE allocate ram images
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1439 bcs L0894
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1440 ldb R$A,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1441 L088A inc ,y+
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1442 decb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1443 bne L088A
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1444 lda 1,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1445 std R$U,u return ptr to mem
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1446 clrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1447 L0894 leas 2,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1448 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1449
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1450
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1451 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1452 * F$SRtMem
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1453 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1454 FSRtMem ldd R$D,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1455 beq L08F2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1456 addd #$00FF
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1457 ldb R$U+1,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1458 beq L08A6
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1459 comb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1460 ldb #E$BPAddr 'Boundary Error'
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1461 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1462
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1463 L08A6 ldb R$U,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1464 beq L08F2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1465 ldx D.SysMem
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1466 abx
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1467 L08AD ldb ,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1468 andb #^RAMinUse
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1469 stb ,x+
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1470 deca
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1471 bne L08AD
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1472 ldx D.SysDAT
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1473 ldy #DAT.BlCt 16 blocks/space
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1474 L08BC ldd ,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1475 cmpd #DAT.Free free block?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1476 beq L08EC ..yes
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1477 ldu D.BlkMap
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1478 lda d,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1479 cmpa #$01
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1480 bne L08EC
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1481 tfr x,d
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1482 subd D.SysDAT
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1483 aslb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1484 aslb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1485 aslb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1486 aslb ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1487 ldu D.SysMem
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1488 leau d,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1489 ldb #32 16 blocks in sys space ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1490 L08DA lda ,u+
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1491 bne L08EC
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1492 decb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1493 bne L08DA
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1494 ldd ,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1495 ldu D.BlkMap
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1496 clr d,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1497 ldd #DAT.Free
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1498 std ,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1499 L08EC leax 2,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1500 leay -1,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1501 bne L08BC
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1502 L08F2 clrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1503 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1504
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1505
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1506 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1507 * F$Boot
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1508 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1509 FBoot comb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1510 lda D.Boot booted already?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1511 bne L0966 ..yes,rts.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1512 inc D.Boot flag it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1513 * ldx D.Init X=init module
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1514 * beq L0908 ..use default if no Init
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1515 * ldd BootStr,x offset to Boot name
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1516 * beq L0908 ..none
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1517 * leax d,x X=Init BootStrap name
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1518 * bra L090C use it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1519
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1520 L0908 leax BootMod,pcr default 'Boot' name
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1521 L090C lbsr LinkSys link to module
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1522 bcs L0966 ..err rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1523 jsr ,y do the boot
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1524 bcs L0966 ..err
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1525 std D.BtSz Bootfile size ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1526 stx D.BtPtr Boot start address ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1527 leau d,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1528 tfr x,d
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1529 anda #$E0 ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1530 clrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1531 pshs a,b,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1532 lsra
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1533 lsra
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1534 lsra
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1535 lsra ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1536 ldy D.SysDAT
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1537 leay a,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1538 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1539 * Find & Verify Boot Modules:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1540
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1541 L092D ldd ,x get header
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1542 cmpd #M$ID12 (87CD) is it a module?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1543 bne L0954 ..no
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1544 tfr x,d
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1545 subd ,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1546 tfr d,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1547 tfr y,d
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1548 os9 F$VModul
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1549 pshs b
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1550 ldd 1,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1551 leax d,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1552 puls b
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1553 bcc L094E
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1554 cmpb #E$KwnMod 'Known Module'?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1555 bne L0954 ..no
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1556 L094E ldd 2,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1557 leax d,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1558 bra L0956
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1559
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1560 L0954 leax 1,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1561 L0956 cmpx 2,s end of boot mem?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1562 bcs L092D ..no, try more
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1563 leas 4,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1564 ldx D.SysDAT ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1565 ldb 13,x ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1566 incb ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1567 ldx D.BlkMap ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1568 lbra L01DF ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1569
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1570 L0966 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1571
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1572
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1573 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1574 * F$AllRam
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1575 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1576 FAllRam ldb R$B,u get # ram blocks desired
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1577 bsr L0970
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1578 bcs L096F
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1579 std R$D,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1580 L096F rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1581
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1582 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1583 L0970 pshs a,b,x,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1584 ldx D.BlkMap X=block map start
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1585
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1586 * Start at new block begin:
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1587
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1588 L0974 leay ,x Y=start
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1589 ldb 1,s B=count
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1590 L0978 cmpx D.BlkMap+2 at end of block map?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1591 bcc L0995 ..yes,end.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1592 lda ,x+ is block free?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1593 bne L0974 ..no, try new start
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1594 decb yes, count-1
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1595 bne L0978 keep trying
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1596
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1597 L0983 tfr y,d D=begin block ptr ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1598 subd D.BlkMap D=begin block number
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1599 sta R$A-1,s return number on ,S
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1600 lda R$B-1,s A=count
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1601 stb R$B-1,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1602
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1603 * mark off blocks
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1604
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1605 L098D inc ,y+ mark as ram in use
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1606 deca
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1607 bne L098D
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1608 clrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1609 puls a,b,x,y,pc okay end.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1610
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1611 L0995 comb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1612 ldb #E$NoRam 'Sys Ram Full'
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1613 stb 1,s return err
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1614 puls a,b,x,y,pc bad end.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1615
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1616 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1617 * F$AlHRam
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1618 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1619
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1620 FALHRAM ldb R$B,u get block count ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1621 bsr L09A5 find blocks ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1622 bcs L09A4 error ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1623 std R$D,u return count in D ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1624
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1625 L09A4 rts ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1626
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1627 L09A5 pshs a,b,x,y match up stack ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1628 ldx D.BlkMap+2 point to end of map ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1629
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1630 L09A9 ldb R$B-1,s get block count ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1631
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1632 L09AB cmpx D.BlkMap at bottom of map? ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1633 bls L0995 yes, error ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1634 lda ,-x block free? ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1635 bne L09A9 no ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1636 decb found them all? ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1637 bne L09AB no, continue ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1638 tfr x,y match up registers ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1639 bra L0983 allocate blocks ++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1640
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1641 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1642 * F$AllImg
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1643 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1644 FAllImg ldd R$D,u A=begin blk#, B=# of blocks
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1645 ldx R$X,u X=proc desc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1646 L09BE pshs a,b,x,y,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1647 asla
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1648 leay P$DATImg,x Y=DAT image ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1649 leay a,y Y=image ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1650 clra
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1651 tfr d,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1652 ldu D.BlkMap
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1653 pshs a,b,x,y,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1654 L09CD ldd ,y++ D=image
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1655 cmpd #DAT.Free unused?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1656 beq L09E2 ..yes
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1657 lda d,u else what is it?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1658 cmpa #RAMinUse ram?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1659 puls a,b
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1660 bne L09F7 ..no
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1661
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1662 subd #$0001
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1663 pshs a,b
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1664 L09E2 leax -1,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1665 bne L09CD
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1666 ldx ,s++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1667 beq L0A00
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1668 L09EA lda ,u+
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1669 bne L09F2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1670 leax -1,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1671 beq L0A00
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1672 L09F2 cmpu D.BlkMap+2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1673 bcs L09EA
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1674
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1675 L09F7 ldb #E$MemFul 'Proc Memory Full' (207)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1676 leas 6,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1677 stb R$B-1,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1678 comb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1679 puls a,b,x,y,u,pc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1680
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1681 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1682 L0A00 puls x,y,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1683 L0A02 ldd ,y++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1684 cmpd #DAT.Free
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1685 bne L0A16
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1686 L0A0A lda ,u+
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1687 bne L0A0A
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1688 inc ,-u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1689 tfr u,d
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1690 subd D.BlkMap
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1691 std -2,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1692
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1693 L0A16 leax -1,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1694 bne L0A02
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1695 ldx 2,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1696 lda P$State,x get proc state &
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1697 ora #ImgChg flag image change
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1698 sta P$State,x .
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1699 clrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1700 puls a,b,x,y,u,pc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1701
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1702
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1703 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1704 * F$FreeHB
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1705 *------------------------------------------------*
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1706 FFreeHB ldb R$B,u B=block count
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1707 ldy R$Y,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1708 bsr L0A31
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1709 bcs L0A30
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1710 sta R$A,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1711 L0A30 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1712
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1713 L0A31 tfr b,a
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1714 L0A33 suba #$09
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1715 nega
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1716 pshs x,b,a
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1717 ldd #$FFFF
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1718 pshs b,a
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1719 bra L0A58
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1720
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1721 FFreeLB ldb R$B,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1722 ldy R$Y,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1723 bsr L0A4B
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1724 bcs L0A4A
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1725 sta R$A,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1726 L0A4A rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1727
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1728 L0A4B lda #$FF
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1729 pshs x,b,a
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1730 lda #$01
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1731 subb #$09
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1732 negb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1733 pshs b,a
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1734 bra L0A58
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1735
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1736 L0A58 clra
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1737 ldb $02,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1738 addb ,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1739 stb $02,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1740 cmpb $01,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1741 bne L0A75
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1742 ldb #$CF
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1743 cmpy <D.SysDAT
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1744 bne L0A6C
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1745 ldb #$ED
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1746 L0A6C stb $03,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1747 comb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1748 bra L0A82
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1749
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1750 L0A71 tfr a,b
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1751 addb $02,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1752 L0A75 lslb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1753 ldx b,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1754 cmpx #DAT.Free
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1755 bne L0A58
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1756 inca
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1757 cmpa $03,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1758 bne L0A71
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1759 L0A82 leas $02,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1760 puls pc,x,b,a
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1761
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1762 FSetImg ldd R$A,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1763 ldx R$X,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1764 ldu R$U,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1765 L0A8C pshs u,y,x,b,a
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1766 leay P$DATImg,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1767 lsla
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1768 leay a,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1769 L0A94 ldx ,u++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1770 stx ,y++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1771 decb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1772 bne L0A94
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1773 ldx $02,s get proc desc ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1774 lda P$State,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1775 ora #ImgChg
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1776 sta P$State,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1777 clrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1778 puls pc,u,y,x,b,a
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1779
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1780 FDATLog ldb R$B,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1781 ldx R$X,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1782 bsr L0AB0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1783 stx R$X,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1784 clrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1785 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1786
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1787 *L0AB0 pshs x,b,a --BGP
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1788 L0AB0 pshs x,b ++BGP
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1789 lslb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1790 lslb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1791 lslb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1792 lslb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1793 lslb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1794 * addb $02,s --BGP
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1795 * stb $02,s --BGP
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1796 addb 1,s ++BGP
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1797 stb 1,s ++BGP
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1798 * puls pc,x,b,a --BGP
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1799 puls pc,x,b ++BGP
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1800
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1801 FLDAXY ldx R$X,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1802 ldy R$Y,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1803 bsr L0AC8
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1804 sta R$A,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1805 clrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1806 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1807
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1808 L0AC8 pshs cc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1809 lda $01,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1810 orcc #IntMasks
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1811 sta >DAT.Regs
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1812 lda ,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1813 clr >DAT.Regs
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1814 puls pc,cc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1815
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1816 LDAXY bsr L0AC8
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1817 leax $01,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1818 bra L0AF0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1819
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1820 L0AEA leax >-$2000,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1821 leay $02,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1822 L0AF0 cmpx #$2000
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1823 bcc L0AEA
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1824 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1825
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1826 FLDDDXY ldd R$D,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1827 leau R$X,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1828 pulu y,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1829 bsr LDDXY
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1830 std -$07,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1831 clrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1832 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1833 LDDXY pshs y,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1834 leax d,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1835 bsr L0AF0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1836 bsr LDAXY
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1837 pshs a
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1838 bsr L0AC8
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1839 tfr a,b
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1840 puls pc,y,x,a
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1841
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1842 FLDABX ldb R$B,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1843 ldx R$X,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1844 lbsr L0C12
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1845 sta R$A,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1846 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1847
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1848 FSTABX ldd R$D,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1849 ldx R$X,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1850 lbra L0C28
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1851
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1852 FMove ldd R$D,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1853 ldx R$X,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1854 ldy R$Y,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1855 ldu R$U,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1856 L0B2C pshs u,y,x,b,a
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1857 leay ,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1858 lbeq L0BF2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1859 pshs y,b,a
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1860 tfr a,b
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1861 lbsr L0C0F
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1862 leay a,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1863 pshs y,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1864 ldb $09,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1865 ldx $0E,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1866 lbsr L0C0F
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1867 leay a,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1868 pshs y,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1869 ldd #$2000
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1870 subd ,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1871 pshs b,a
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1872 ldd #$2000
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1873 subd $06,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1874 pshs b,a
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1875 ldx $08,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1876 leax >-$6000,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1877 ldu $04,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1878 leau >-$4000,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1879 L0B6A pshs cc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1880 ldd [<$07,s]
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1881 pshs b
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1882 ldd [<$0C,s]
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1883 pshs b
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1884 ldd <$11,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1885 cmpd $03,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1886 bls L0B82
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1887 ldd $03,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1888 L0B82 cmpd $05,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1889 bls L0B89
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1890 ldd $05,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1891 L0B89 cmpd #$0040
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1892 bls L0B84
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1893 ldd #$0040
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1894 L0B84 std $0F,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1895 puls y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1896 orcc #IntMasks
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1897 sty >$FFA5
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1898 andb #$07
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1899 beq L0B99
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1900 L0B92 lda ,x+
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1901 sta ,u+
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1902 decb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1903 bne L0B92
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1904 L0B99 ldb $0E,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1905 lsrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1906 lsrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1907 lsrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1908 beq L0BBC
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1909 pshs b
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1910 exg x,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1911 L0BA4 pulu y,b,a
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1912 std ,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1913 sty $02,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1914 pulu y,b,a
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1915 std $04,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1916 sty $06,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1917 leax $08,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1918 dec ,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1919 bne L0BA4
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1920 leas $01,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1921 exg x,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1922 L0BBC ldy <D.SysDAT
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1923 lda $0B,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1924 ldb $0D,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1925 std >$FFA5
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1926 puls cc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1927 ldd $0E,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1928 subd $0C,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1929 beq L0BEF
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1930 std $0E,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1931 ldd ,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1932 subd $0C,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1933 bne L0BD7
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1934 ldd #$2000
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1935 leax >-$2000,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1936 inc $0B,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1937 inc $0B,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1938 L0BD7 std ,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1939 ldd $02,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1940 subd $0C,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1941 bne L0BEA
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1942 ldd #$2000
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1943 leau >-$2000,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1944 inc $07,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1945 inc $07,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1946 L0BEA std $02,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1947 lbra L0B6A
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1948 L0BEF leas <$10,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1949 L0BF2 clrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1950 puls pc,u,y,x,b,a
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1951
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1952 L0BF5 pshs b
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1953 tfr x,d
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1954 anda #$1F
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1955 exg d,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1956 anda #$E0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1957 lsra
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1958 lsra
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1959 lsra
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1960 lsra
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1961 L0C07 puls pc,b
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1962 L0C0F bsr L0BF5
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1963 *L0C09 pshs b --BGP
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1964 L0C09
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1965 ldu <D.TskIPt
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1966 lslb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1967 ldu b,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1968 rorb ++BGP
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1969 * puls pc,b --BGP
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1970 rts ++BGP
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1971
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1972 L0C12 andcc #^Carry
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1973 pshs u,x,b,cc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1974 bsr L0C0F
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1975 ldd a,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1976 orcc #IntMasks
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1977 stb >DAT.Regs
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1978 lda ,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1979 clr >DAT.Regs
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1980 puls pc,u,x,b,cc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1981
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1982 L0C28 andcc #^Carry
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1983 pshs u,x,b,a,cc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1984 bsr L0C0F
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1985 ldd a,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1986 lda $01,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1987 orcc #IntMasks
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1988 stb >DAT.Regs
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1989 sta ,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1990 clr >DAT.Regs
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1991 puls pc,u,x,b,a,cc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1992
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1993 FLDBBX andcc #^Carry
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1994 pshs u,x,a,cc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1995 bsr L0C0F
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1996 ldd a,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1997 orcc #IntMasks
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1998 stb >DAT.Regs
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1999 ldb ,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2000 clr >DAT.Regs
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2001 puls pc,u,x,a,cc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2002
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2003 FAllTsk ldx R$X,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2004 L0C58 ldb P$Task,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2005 bne L0C64
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2006 cmpx <$004A
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2007 beq L0C64
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2008 bsr L0CA6
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2009 bcs L0C65
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2010 stb P$Task,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2011 bsr L0C79
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2012 L0C64 clrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2013 L0C65 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2014
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2015 FDelTsk ldx R$X,u get proc desc ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2016 L0C68 ldb P$Task,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2017 beq L0C65
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2018 clr P$Task,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2019 bra L0CC3
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2020 L0C70 lda P$State,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2021 bita #ImgChg
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2022 bne L0C79
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2023 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2024
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2025 FSetTsk ldx R$X,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2026 L0C79 lda P$State,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2027 anda #^ImgChg
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2028 sta P$State,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2029 andcc #^Carry
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2030 pshs u,y,x,b,a,cc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2031 ldb P$Task,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2032 leax P$DATImg,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2033 ldu <D.TskIPt
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2034 lslb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2035 stx b,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2036 cmpb #$02
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2037 bgt L0C9F
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2038 ldu #DAT.Regs
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2039 leax 1,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2040 ldb #$08
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2041 L0C98 lda ,x++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2042 sta ,u+
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2043 decb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2044 bne L0C98
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2045 L0C9F puls pc,u,y,x,b,a,cc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2046
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2047 FResTsk bsr L0CA6
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2048 stb R$B,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2049 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2050
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2051 L0CA6 pshs x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2052 ldb #$02
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2053 ldx <D.Tasks
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2054 L0CAC lda b,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2055 beq L0CBA
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2056 incb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2057 cmpb #$20
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2058 bne L0CAC
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2059 comb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2060 ldb #$EF
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2061 bra L0CBF
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2062
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2063 L0CBA inc b,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2064 clra
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2065 L0CBF puls pc,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2066
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2067 FRelTsk ldb R$B,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2068 L0CC3 pshs x,b
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2069 tstb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2070 beq L0CD0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2071 ldx <D.Tasks
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2072 clr b,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2073 L0CD0 puls pc,x,b
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2074
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2075 * Control goes here when a tick interrupt comes in
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2076 Clock ldb #P$STicks assume system state
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2077 ldx <D.Proc get curr process
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2078 lda P$State,x get process state
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2079 bmi L0CDC branch if SysState
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2080 ldb #P$UTicks otherwise user state
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2081 L0CDC lbsr IncCount count ticks
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2082 ldx <D.SProcQ point to sleep queue
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2083 beq L0CFD branch if no process sleeping
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2084 * Process sleep queue here!
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2085 * Sleep queue is sorted by process closest to wake first, all the way
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2086 * to processes that are sleeping forever.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2087 lda P$State,x get process' state
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2088 bita #TimSleep sleeping forever?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2089 beq L0CFD yep, finished
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2090 ldu P$SP,x else get process' stack pointer
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2091 ldd R$X,u and get process' sleep tick counter
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2092 subd #$0001 subtract 1 from tick counter
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2093 std R$X,u save back to process' X
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2094 bne L0CFD branch if not ready to wake
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2095 L0CE7 ldu P$Queue,x else time to wake up! so...
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2096 bsr L0D11 activate this process
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2097 leax ,u point to next process
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2098 beq L0CFB
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2099 lda P$State,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2100 bita #TimSleep
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2101 beq L0CFB
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2102 ldu P$SP,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2103 ldd R$X,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2104 beq L0CE7
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2105 L0CFB stx <D.SProcQ store new process pointer
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2106 L0CFD dec <D.Slice decrement slice
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2107 bne L0D0D branch if not at end of timeslice
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2108 inc <D.Slice
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2109 ldx <D.Proc get current process
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2110 beq L0D0D branch if none
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2111 lda P$State,x ...else get state
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2112 ora #TimOut and indicate it's out of time
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2113 sta P$State,x then restore it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2114 L0D0D clrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2115 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2116
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2117 * X = address of process descriptor to put in active queue
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2118 FAProc ldx R$X,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2119 L0D11 clrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2120 pshs u,y,x,b,cc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2121 lda P$Prior,x get priority of process
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2122 sta P$Age,x reset age to priority
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2123 orcc #IntMasks mask interrupts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2124 ldu #$0045
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2125 bra L0D29
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2126 L0D1F inc $0B,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2127 bne L0D25
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2128 dec $0B,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2129 L0D25 cmpa $0B,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2130 bhi L0D2B
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2131 L0D29 leay ,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2132 L0D2B ldu $0D,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2133 bne L0D1F
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2134 ldd $0D,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2135 stx $0D,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2136 std $0D,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2137 puls pc,u,y,x,b,cc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2138
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2139 * System IRQ service routine
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2140
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2141 XIRQ ldx <D.Proc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2142 sts P$SP,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2143 lds <D.SysStk
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2144 ldd <D.SysSvc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2145 std <D.XSWI2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2146 ldd <D.SysIRQ
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2147 std <D.XIRQ
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2148 jsr [>D.SvcIRQ]
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2149 bcc L0D5B
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2150 ldx <D.Proc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2151 ldb P$Task,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2152 ldx P$SP,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2153 lbsr L0C12
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2154 ora #IntMasks
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2155 lbsr L0C28
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2156 L0D5B orcc #IntMasks
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2157 ldx <D.Proc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2158 lda P$State,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2159 bita #TimOut
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2160 bne L0D7C
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2161 L0D78 ldu $04,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2162 bra L0DB9
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2163 L0D7C anda #$DF
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2164 sta $0C,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2165 lbsr L0C68
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2166 L0D83 bsr L0D11
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2167
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2168 FNProc ldx <D.SysPrc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2169 stx <D.Proc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2170 lds <D.SysStk
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2171 andcc #^(IntMasks)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2172 bra L0D93
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2173
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2174 L0D91 cwai #^(IntMasks)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2175 L0D93 orcc #IntMasks
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2176 lda #Suspend
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2177 ldx #$0045
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2178 L0D9A leay ,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2179 ldx $0D,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2180 beq L0D91
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2181 bita P$State,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2182 bne L0D9A
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2183 ldd P$Queue,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2184 std $0D,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2185 stx <D.Proc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2186 lbsr L0C58
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2187 bcs L0D83
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2188 lda <D.TSlice
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2189 sta <D.Slice
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2190 ldu P$SP,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2191 lda P$State,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2192 bmi L0E29
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2193 L0DB9 bita #Condem
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2194 bne L0DFD
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2195 lbsr L0C70
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2196 ldb P$Signal,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2197 beq L0DF2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2198 decb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2199 beq L0DEF
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2200 leas -$0C,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2201 leau ,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2202 lbsr L02CB
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2203 lda P$Signal,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2204 sta $02,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2205 ldd P$SigVec,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2206 beq L0DFD
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2207 std $0A,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2208 ldd P$SigDat,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2209 std $08,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2210 ldd P$SP,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2211 subd #$000C
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2212 std P$SP,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2213 lbsr L02DA
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2214 leas $0C,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2215 ldu P$SP,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2216 clrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2217 L0DEF stb P$Signal,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2218 L0DF2 ldd <D.UsrSvc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2219 std <D.XSWI2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2220 ldd <D.UsrIRQ
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2221 std <D.XIRQ
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2222 bra L0E4C
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2223 L0DFD lda P$State,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2224 ora #SysState
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2225 sta P$State,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2226 leas $0200,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2227 andcc #^(IntMasks)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2228 ldb P$Signal,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2229 clr P$Signal,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2230 os9 F$Exit
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2231
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2232 * Interrupts come through here when in system state
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2233 S.SysIRQ lda <D.SSTskN get system task number
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2234 clr <D.SSTskN clear system task number in globs
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2235 pshs a save on stack
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2236 jsr [>D.SvcIRQ]
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2237 puls a
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2238 bsr L0E39
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2239 bcc XFIRQ
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2240 ldb R$CC,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2241 orb #IntMasks
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2242 stb R$CC,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2243 XFIRQ rti
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2244
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2245 L0E29 clr ,-s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2246 L0E2B ldx <D.SysPrc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2247 lbsr L0C70
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2248 orcc #IntMasks
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2249 puls a
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2250 bsr L0E39
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2251 leas ,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2252 rti
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2253
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2254 * A = task number
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2255 L0E39 sta <D.SSTskN
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2256 beq S.AltIRQ
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2257 ora <D.TINIT
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2258 sta <D.TINIT
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2259 sta DAT.Task
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2260 S.AltIRQ rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2261
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2262 S.SvcIRQ jmp [>D.Poll]
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2263 S.POLL orcc #Carry
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2264 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2265
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2266 L0E4C ldb $06,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2267 orcc #IntMasks
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2268 bsr L0E8D
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2269 lda <D.TINIT
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2270 ora #$01
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2271 sta <D.TINIT
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2272 sta DAT.Task
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2273 leas ,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2274 rti
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2275
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2276 L0E5E ldb <D.TINIT
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2277 orb #$01
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2278 stb <D.TINIT
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2279 stb DAT.Task
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2280 jmp ,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2281
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2282 S.Flip0 pshs b,a
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2283 lda <D.TINIT
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2284 anda #$FE
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2285 sta <D.TINIT
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2286 sta DAT.Task
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2287 clr <D.SSTskN
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2288 puls b,a
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2289 tfr x,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2290 tfr a,cc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2291 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2292
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2293 S.Flip1 ldb #$01 get task image entry number
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2294 bsr L0E8D copy over the DAT image
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2295 lda <D.TINIT get copy of GIME Task side
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2296 ora #$01 switch it to task one
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2297 sta <D.TINIT save it to image
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2298 sta DAT.Task save it to GIME register
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2299 inc <D.SSTskN increment system tstae task number
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2300 rti return
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2301
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2302 L0E8D pshs u,x,b,a
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2303 ldx #$FFA8 get MMU start register for process
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2304 ldu <D.TskIPt get task image pointer table
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2305 lslb account for 2 bytes per entry
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2306 ldu b,u get address of MMU entry
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2307 leau $01,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2308 ldb #$08
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2309 L0E9B lda ,u++
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2310 sta ,x+
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2311 decb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2312 bne L0E9B
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2313 puls pc,u,x,b,a
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2314
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2315 * SWI3.V - Control comes here upon a SWI3 interrupt
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2316 SWI3.V orcc #IntMasks mask interrupts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2317 ldb #D.SWI3 get direct page global vector
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2318 bra IRQCntrl
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2319
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2320 * SWI2.V - Control comes here upon a SWI2 interrupt
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2321 SWI2.V orcc #IntMasks mask interrupts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2322 ldb #D.SWI2 get direct page global vector
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2323 bra IRQCntrl
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2324
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2325 * FIRQ.V - Control comes here upon a FIRQ interrupt
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2326 FIRQ.V tst ,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2327 bmi L0EB0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2328 leas -$01,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2329 pshs y,x,dp,b,a
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2330 lda $08,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2331 stu $07,s
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2332 ora #$80
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2333 pshs a
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2334 L0EB0 ldb #D.FIRQ
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2335 bra IRQCntrl
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2336
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2337 * IRQ.V - Control comes here upon a IRQ interrupt
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2338 IRQ.V orcc #IntMasks mask interrupts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2339 ldb #D.IRQ get direct page global vector
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2340 * B = address of vector from direct page
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2341 IRQCntrl clra clear A
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2342 tfr a,dp make DP point to 0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2343 sta DAT.Task redundancy???
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2344 lda <D.TINIT get task register shadow
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2345 anda #$FE clear bit to use $FFA0-$FFA7
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2346 sta <D.TINIT save in shadow
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2347 sta DAT.Task save in hardware (do it!)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2348 clra clear A
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2349 tfr d,x D = addr of direct page vector
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2350 jmp [,x] transfer control to addr in passed vector
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2351
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2352 * SWI.V - Control comes here upon a SWI interrupt
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2353 SWI.V ldb #D.SWI get direct page global vector
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2354 bra IRQCntrl
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2355
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2356 * NMI.V - Control comes here upon a NMI interrupt
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2357 NMI.V ldb #D.NMI get direct page global vector
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2358 bra IRQCntrl
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2359
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2360 * Filler bytes to get $ED9
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2361 Filler fcb $39,$39,$39,$39,$39,$39,$39,$39,$39,$39
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2362 * fcb $39,$39,$39,$39,$39,$39,$39,$39,$39,$39
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2363
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2364 emod
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2365 eom equ *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2366
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2367 * Direct Page vectors
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2368 D.VECTRS fdb $F100+Clock goes in D.Clock
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2369 fdb $F100+XSWI3 goes in D.XSWI3
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2370 fdb $F100+XSWI2 goes in D.XSWI2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2371 fdb $F100+XFIRQ goes in D.XFIRQ
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2372 fdb $F100+XIRQ goes in D.XIRQ
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2373 fdb $F100+XSWI goes in D.XSWI
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2374 fdb $F100 goes in D.NMI
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2375 fcb $55
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2376 * 6809 vectors
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2377 * This table starts at $FEEE. Each address is pointed to by the 6809
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2378 * vectors at $FFF0 (defined in the CoCo 3 ROM).
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2379 lbra SWI3.V SWI3
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2380 lbra SWI2.V SWI2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2381 lbra FIRQ.V FIRQ
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2382 lbra IRQ.V IRQ
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2383 lbra SWI.V SWI
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2384 lbra NMI.V NMI
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2385
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2386 eo equ *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2387 end