annotate level2/modules/rel.asm @ 899:6841c75afc62

Modified
author boisy
date Fri, 17 Jan 2003 21:04:02 +0000
parents ccd02907d382
children bc2a9ce254fd
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 * Rel - OS-9 Level Two relocation 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 * 5 Original version by Tandy/Microware
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
9 * 6 Added instruction to put into ALL-RAM mode BGP 98/10/10
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
10 * for ROM based kernels.
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
11 * Added more comments from version provided by BGP 98/10/21
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
12 * Curtis Boyle
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
13
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
14 nam REL
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
15 ttl OS-9 Level Two relocation module
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
16
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
17 ifp1
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
18 use defsfile
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
19 endc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
20
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
21 Bt.Start equ $ED00
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
22 ScStart equ $8000 screen start in memory
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
23 XX.Size equ 6 number of bytes before REL actually starts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
24 Offset equ Bt.Start+XX.Size
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
25
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
26 tylg set Systm+Objct
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
27 atrv set ReEnt+rev
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
28 rev set $01
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
29 edition set 6
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
30
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
31 ********************************************************************
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
32 * Any changes to the next 3 lines requires changes in XX.Size, above
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
33 fcc /OS/ sync bytes
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
34 bra Start+XX.Size execution start
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
35 fdb $1205 filler bytes
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
36
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
37 mod eom,name,tylg,atrv,start,size
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
38
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
39 org 0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
40 size equ . REL doesn't require any memory
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
41
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
42 name fcs /REL/
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
43 fcb edition
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
44
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
45 * OS-9 boot message (Setup for a 32 column screen)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
46
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
47 BootMsg fcc /OS/
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
48 fcb $79
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
49 fcb $60
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
50 fcc /BOOT/
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
51
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
52 * Fail message
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
53
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
54 FailMsg fcc /FAILED/
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
55
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
56 * GIME register default values
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
57
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
58 CC3Regs fcb $EC CC2, MMU, IRQ, Vector page, SCS
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
59 fcb $00 map type 0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
60 fcb $00 no FIRQ
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
61 fcb $00 no IRQ
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
62 fdb $0900 timer
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
63 fcb $00 unused
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
64 fcb $00 unused
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
65 fcb $00
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
66 fcb $00
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
67 fcb $00
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
68 fcb $00
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
69 fdb $0FE0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
70 fcb $00
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
71 fcb $00
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
72
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
73 * Palette register default colors
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
74
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
75 DefPals fcb $12 green
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
76 fcb $36
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
77 fcb $09 blue
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
78 fcb $24 red
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
79 fcb $3F white
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
80 fcb $1B cyan
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
81 fcb $2D magenta
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
82 fcb $26
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
83 fcb $00 black
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
84 fcb $12 green
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
85 fcb $00 black
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
86 fcb $3F white
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
87 fcb $00 black
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
88 fcb $12 green
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
89 fcb $00 black
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
90 fcb $26
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
91
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
92 * CC crash routine (This gets moved to direct page)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
93
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
94 CrashRtn clr >Dat.Task go to map type 0 - called by CC3Go from map 1
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
95 jmp >Offset+crash
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
96
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
97 * CC3 warmstart
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
98
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
99 fcb $00 warm start flag
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
100 fdb $0074 go to $0074, next routine
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
101 * reset vector: map ROMs out and go to REL in the default DECB block map,
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
102 * which is still block $3F at the top of memory
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
103 nop required for the ROMs to believe it's a reset vector
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
104 clr >$FFDF go to all RAM mode
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
105 jmp >Offset+reset and re-start the boot
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
106
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
107 crash
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
108 fcb $C6,$01,$20,$07,$4F
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
109 fcb $53,$20,$5B,$12,$05
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
110
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
111 ******************************
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
112 *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
113 * Main entry point
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
114 *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
115
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
116 reset
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
117 start clr $FFDF ALL RAM MODE (for ROM-based kernels) ++BGP
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
118 clrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
119 orcc #IntMasks turn off IRQ's
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
120 clr >PIA0Base+3 turn off SAM IRQ's
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
121 clra
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
122 tfr a,dp set direct page to $0000
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
123 sta <D.CbStrt
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
124 sta DAT.Regs map in block 0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
125 lds #$1FFF set stack to the end of the block
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
126 pshs b set first byte of stack to 0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
127 ldb #D.Clock get length of system direct page to initialize
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
128 ldx #D.Tasks get start of system direct page
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
129 L0072 sta ,x+ clear out the direct page
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
130 decb done?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
131 bne L0072 no, keep going till done
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
132 inca
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
133 sta <D.Speed hi speed
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
134 sta >$FFD9 set to high speed
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
135 leau CC3Regs,pcr point to the video setup data
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
136 ldx #D.HINIT set video mapping
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
137 L0084 ldd ,u++ get the bytes
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
138 std -256,x save in the hardware
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
139 std ,x++ and in the direct page
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
140 cmpx #D.Speed end of video hardware yet?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
141 bcs L0084
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
142
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
143 * set up palettes
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
144
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
145 leau >DefPals,pcr point to palette data
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
146 ldy #PalAdr point to GIME palette start
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
147 ldb #16 get length of data
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
148 bsr CopyRtn move table
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
149
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
150 lda #$3E
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
151 sta >$FFA4 map in the block
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
152 ldx #ScStart start of the block
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
153 clrb get length of screen
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
154 ldu #$6060 clear out screen mem
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
155 L00A9 stu ,x++ save data
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
156 decb done?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
157 bne L00A9 no, keep going
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
158
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
159 * print 'OS9 BOOT'
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
160
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
161 ldy #ScStart+$010C get screen address for print
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
162 leau BootMsg,pcr point to boot message
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
163 ldb #8 get length of data
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
164 bsr CopyRtn print it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
165
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
166 * setup VDG hardware to point at $4000
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
167
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
168 ldb #5 get length of screen init
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
169 ldx #$FFC6 get start register to set up screen
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
170 L00BF sta ,x++ set SAM bits
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
171 decb done?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
172 bne L00BF no, keep going
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
173 sta 1,x set last couple of bits
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
174 sta 3,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
175 ldb ,s can we continue? (first byte should be 0)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
176 beq L00DD yes, continue boot
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
177
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
178 * boot failed
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
179
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
180 ldy #ScStart+$014D get screen address
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
181 leau >FailMsg,pcr point to 'Failed' message
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
182 ldb #$06 get length of data
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
183 bsr CopyRtn show failed message
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
184 clr >$FF40 shut off disk motor
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
185 Hang bra Hang dead loop forever
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
186
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
187 L00DD leax >L00DD,pcr get pointer to where we are in memory
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
188 cmpx #$ED00 warm start?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
189 bcc JmpOS9P1 yep...
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
190 ldu #$2600 else copy at $2600...
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
191 ldx #$1200 $1200 bytes...
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
192 ldy #$ED00 ...to $ED00
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
193 bsr L00F8
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
194 jmp >Offset+JmpOS9P1 jump to OS9p1!
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
195
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
196 * Copies B bytes from ,U to ,Y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
197
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
198 CopyRtn clra
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
199 tfr d,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
200 L00F8 ldb ,u+
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
201 stb ,y+
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
202 leax -1,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
203 bne L00F8
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
204 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
205
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
206 * Setup Crash routine
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
207
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
208 JmpOS9P1 leau >CrashRtn,pcr get pointer to crash routine
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
209 ldb #16 get length of crash routine
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
210 ldy #D.Crash point to crash routine area
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
211 bsr CopyRtn move it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
212
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
213 * Execute Boot module
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
214
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
215 leax <eom,pcr point to start of boot
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
216 ldd M$Size,x get size of Boot
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
217 leax d,x move past it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
218 ldd M$Exec,x get execution offset to OS9p1
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
219 jmp d,x execute it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
220
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
221 * Fill the rest to put Boot at proper address
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
222
518
ccd02907d382 Fixed wrong filler value
boisy
parents: 460
diff changeset
223 Filler fill $39,$12A-3-*
0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
224
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
225 emod
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
226 eom equ *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
227 end