Mercurial > hg > Members > kono > nitros9-code
annotate 3rdparty/utils/winfo/winfo.asm @ 3150:37737e5ec640
Add coco3fpga RAM disk and RTC driver
Added clock2_coco3fpga.as to level1/modules.
Added ramd_coco3fpga.asm & r0_ramd_coco3fpga.asm to level2/modules.
Build them on level2/coco3.
Added definitions to "coco3/modules/makefile" to build
'ramd_coco3fpga.dr", "r0_ramd_cocofga.dd" & "clock2_coco3fpga".
author | Bill Pierce <merlinious999@gmail.com> |
---|---|
date | Mon, 06 Feb 2017 22:25:15 +0100 |
parents | 61fb37b19edd |
children |
rev | line source |
---|---|
396 | 1 nam WInfo |
2 ttl OS9 Level II sub to get window information - Ron Lammardo | |
3 | |
4 * | |
5 * 11/22/87 - Edition #1 - for OS9 Level II V02.00.01 | |
6 * 12/22/95 - Edition #2 - for ALL versions of OS-9 by Alan DeKok | |
2322
61fb37b19edd
Edition #3 - for vtio instead of cc3io Willard Goosey
aaronwolfe
parents:
2127
diff
changeset
|
7 * 01/20/2010 - Edition #3 - for vtio instead of cc3io Willard Goosey |
396 | 8 * |
9 | |
10 ifp1 | |
11 use defsfile | |
12 endc | |
13 | |
14 typelang set sbrtn+objct | |
15 attrev set reent+revision | |
16 revision set 1 | |
17 | |
18 mod Eom,Mname,Typelang,Attrev,Start,Datend | |
19 | |
20 mname fcs /WInfo/ | |
2322
61fb37b19edd
Edition #3 - for vtio instead of cc3io Willard Goosey
aaronwolfe
parents:
2127
diff
changeset
|
21 edition fcb 3 edition |
396 | 22 |
23 org 0 | |
24 use winfodefs | |
25 | |
26 org 0 | |
27 stackadr rmb 2 stack address for return | |
28 de rmb 1 device table entry # | |
29 sctype rmb 1 screen type | |
30 offset rmb 2 screen start offset in block | |
31 datimg rmb 2 address of sys DAT image in sysprc | |
32 datadr rmb 2 address of sys DAT in system | |
33 entry rmb 2 address of currently proccessed window entry | |
34 wnum rmb 1 window entry number | |
35 scrblock rmb 1 block # containing screen mem | |
36 blockcnt rmb 1 # of blocks in screen | |
37 wstart rmb 2 x,y coordinates of window start on screen | |
38 wsize rmb 2 x,y size of window | |
39 cwstart rmb 2 x,y coordinates of current working area | |
40 cwsize rmb 2 x,y size of current working area | |
41 paramadr rmb 2 address of window name to dump | |
42 paramln. rmb 1 | |
43 paramln rmb 1 size of window name to dump | |
44 vdgadr rmb 2 address of vdg screen | |
45 vdgflag rmb 1 vdg screen flag (1=yes) | |
46 scrnaddr rmb 2 address of screen | |
47 d$devtbl rmb 2 address of device table | |
48 mdname rmb 2 adress of module name | |
49 drvnam rmb 2 address of device driver name | |
50 buffaddr rmb 2 address of return packet | |
51 buffln. rmb 1 dummy byte | |
52 buffln rmb 1 length of return packet..must be > WI$size | |
53 weaddr rmb 2 logical address of window entry insys map (debugging only) | |
54 devmaddr rmb 2 device static storage entry in sys map (debugging only) | |
55 fgc rmb 1 foreground color | |
56 bgc rmb 1 background color | |
57 bdc rmb 1 border color | |
58 curx rmb 1 x coordinate of cursor | |
59 cury rmb 1 y coordinate of cursor | |
60 bpr rmb 2 bytes per row | |
61 stymark rmb 1 screen type marker byte | |
62 paltaddr rmb 2 address of palette registers | |
63 msb rmb 1 working field - msb for 2 digit mults | |
64 lsb rmb 1 working field - lsb for 2 digit mults | |
65 lset rmb 1 logic set # | |
66 psetgb rmb 2 pset group/buffer | |
67 fontgb rmb 2 font group/buffer | |
68 gcurgb rmb 2 gfx cursor group/buffer | |
69 minidat rmb 2 temp dat for cpymem | |
70 bfngrp rmb 2 buffer #/group return | |
71 drawcrsr rmb 4 draw cursor position - xxyy | |
72 sysdat rmb 16 system DAT image | |
73 devname rmb 5 device descriptor name | |
74 devtable rmb 9 device table entry | |
75 devmem equ . device memory copy | |
76 sc rmb 32 screen table | |
77 we rmb 64 window entry | |
78 rmb 32 filler so we got 128 bytes for dev memory | |
79 datend equ . | |
80 | |
81 E$Param equ $38 bad Parameter error | |
82 | |
1936 | 83 vtio fcs /VTIO/ used to compare device driver name |
2127 | 84 vtiolen equ *-vtio |
396 | 85 |
86 tmpdat fcb 0,0 mini-dat image for block 0 data fetches | |
87 | |
88 blnkpalt fcb $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff | |
89 fcb $ff,$ff,$ff,$ff,$ff,$ff,$ff,$ff | |
90 | |
91 stytable fcb $01,$03,$03,$0f | |
92 blktable fcb 1,1,0,0,2,2,4,4 | |
93 | |
94 errmsg1 equ * | |
95 fcc /Requested device not in device table/ | |
96 errm1ln equ *-errmsg1 | |
1936 | 97 errmsg2 fcc /Requested device is not VTIO/ |
396 | 98 errm2ln equ *-errmsg2 |
99 errmsg3 fcc /Can not access window until written to/ | |
100 errm3ln equ *-errmsg3 | |
101 | |
102 start equ * | |
103 pshs u,dp save registers | |
104 tfr s,d put in 'd' for computations | |
105 clrb clear lsb | |
106 suba #1 bump down page to make sure we don't conflict | |
107 tfr a,dp now set direct page | |
108 tfr d,u and set u register | |
109 sts <stackadr save address of stack | |
110 leax stackadr+2,u start adrress of bytes to init | |
111 ldb #devtable end addr..# of bytes to clear | |
112 lda #$ff fill character | |
113 lbsr zapblock init the characters | |
114 | |
115 * get passed parameters | |
116 | |
117 ldx 5,s # of parameters | |
118 cmpx #2 do we have two params? | |
119 lbne badparms no...error | |
120 ldx 7,s 1st param addr (window name addr) | |
121 stx <paramadr save the window name addr | |
122 os9 F$PrsNam get end of name | |
123 lbcs exit exit on error | |
124 clra clear msb | |
125 std <paramln. save window name length | |
126 ldx 11,s 2nd param addr (buffer addr) | |
127 stx <buffaddr save the buffer address | |
128 ldx 13,s 2nd param length | |
129 stx <buffln. save the buffer length address | |
130 cmpx #WI$Size check if buffer big enough | |
131 lblo smllbuff no..send buffer to small status | |
132 | |
133 * clear return buffer | |
134 | |
135 ldx <buffaddr address of return buffer | |
136 ldb #WI$ermsg end address to init | |
137 lda #$ff fill char | |
138 lbsr zapblock zap the block | |
139 ldb #40 # of bytes to init | |
140 lda #$20 space fill | |
141 lbsr zapblock zap the message | |
142 | |
143 * get system process descriptor for sys DAT image | |
144 | |
145 leax tmpdat,pcr addr of sys mini-dat | |
146 tfr x,d put it in d | |
147 ldx #$004C Addr of dat image in system direct page | |
148 ldy #2 2 bytes to get | |
149 pshs u save u | |
150 leau datadr,u addr of receiver | |
151 os9 F$CpyMem get it | |
152 puls u restore u | |
153 lbcs exit exit on error | |
154 leax tmpdat,pcr addr of sys mini-data | |
155 tfr x,d put it in d | |
156 ldx datadr,u physical addr of sys DAT in sys addr map | |
157 pshs u save u | |
158 leay sysdat,u addr of receiver | |
159 sty <datimg save it for later | |
160 tfr y,u put in u for call | |
161 ldy #16+16+1 16 bytes to get in image | |
162 os9 F$CpyMem get it | |
163 puls u restore u | |
164 lbcs exit and exit on error | |
165 | |
166 ldx <datimg get ptr to system DAT image | |
167 lda 16+16,x grab Level III SCF map info | |
168 beq not.l3 | |
169 sta 3,x | |
170 inca | |
171 sta 5,x | |
172 | |
173 * get offset in system map to device tables | |
174 not.l3 ldy #2 2 bytes to get | |
175 ldd <datimg addr of sys DAT image | |
176 ldx #D.DevTbl addr of device table addr | |
177 pshs u save u | |
178 leau d$devtbl,u addr of reciever | |
179 os9 F$Cpymem get it | |
180 puls u restore u | |
181 lbcs exit exit on error | |
182 clr <de clear device table entry # | |
183 ldx d$devtbl,u addr of device table | |
184 leax -$0D,x back off one entry for increment in loop | |
185 stx d$devtbl,u and save it again | |
186 leax devtable,u get the addr of our copy of devtable | |
187 stx <entry save the entry addr for later | |
188 | |
189 * just do an I$Attach instead of rooting through the device table | |
190 | |
191 lda #READ. read-only permissions | |
192 ldx <paramadr point to window name | |
193 pshs u save for later | |
194 OS9 I$Attach get U=address of device table entry | |
195 puls x kill end of device name pointer | |
196 lbcs error1 exit on error | |
197 | |
198 OS9 I$Detach so link count is correct | |
199 exg x,u now U=memory, and X=ptr to device table entry | |
200 | |
201 leay devtable,u addr of reciever | |
202 pshs u save u | |
203 tfr y,u put reciever addr in u | |
204 ldy #9 copy table entry | |
205 ldd <datimg addr of sys DAT image | |
206 os9 F$Cpymem get it | |
207 puls u restore u | |
208 lbcs exit exit on error | |
209 leax devtable,u | |
210 lda V$USRS,x test for entry in use | |
211 lbeq error3 if not in use...give out error saying so | |
212 | |
213 * Alan DeKok's mod: lots of code removed here | |
214 | |
215 * get driver name offset | |
216 | |
217 ldx <entry get device entry address | |
218 ldx V$DRIV,x get driver module start addr | |
219 leax M$Name,x get addr of module name | |
220 ldy #2 get 2 bytes | |
221 ldd <datimg addr of sys DAT image | |
222 pshs u save u | |
223 leau mdname,u addr of reciever | |
224 os9 F$CpyMem get it | |
225 puls u restore u | |
226 lbcs exit exit on error | |
227 | |
228 * now get actual driver name | |
229 | |
230 ldx <entry addr of deice entry | |
231 ldd V$DRIV,x driver module start addr | |
232 addd mdname,u + module offset to driver name | |
233 tfr d,x put it in x so we can grab it | |
2127 | 234 ldy #vtiolen length of name |
396 | 235 ldd <datimg addr of sys DAT image |
236 pshs u save u | |
237 leau devname,u addr of receiver | |
238 os9 F$CpyMem get it | |
239 puls u restore u | |
240 lbcs exit exit on error | |
241 | |
1936 | 242 * we got the requested device...now see if its vtio |
396 | 243 |
2322
61fb37b19edd
Edition #3 - for vtio instead of cc3io Willard Goosey
aaronwolfe
parents:
2127
diff
changeset
|
244 ldb #vtiolen N bytes to compare |
1936 | 245 leax vtio,pcr get addr of 'VTIO' |
396 | 246 leay devname,u get addr of the driver nam |
247 os9 F$CmpNam see if they're the same | |
248 lbcs error2 if not-skip to next entry | |
249 | |
250 * get the device static storage | |
251 | |
252 ldx <entry addr of device entry | |
253 ldd V$STAT,x addr of static storage | |
254 tfr d,x put in x so we can get it | |
255 stx <devmaddr save device mem addr | |
256 ldd <datimg addr of sys DAT image | |
257 ldy #$80 bytes to get | |
258 pshs u save u | |
259 leau devmem,u addr of receiver | |
260 os9 F$CpyMem get it | |
261 puls u restore u | |
262 lbcs exit exit on error | |
263 | |
264 * get the window entry number | |
265 | |
266 leax devmem,u addr of device mem | |
267 lda $35,x offset to window entry # | |
268 sta wnum,u save it | |
269 | |
270 * check if its a vdg screen | |
271 | |
272 clr <vdgflag else clear the flag | |
273 leax devmem,u addr of device memory | |
274 lda 6,x offset to window type | |
275 anda #$80 check the high bit | |
276 lbeq vdgscrn if not set,its a vdg screen so jump | |
277 | |
278 * get actual window entry | |
279 | |
280 lda wnum,u window entry # | |
281 ldb #64 window entry size | |
282 mul find offset | |
283 addd #$1280 add it to start of window entrys | |
284 std <weaddr save window entry address | |
285 tfr d,x put in x so we can get it | |
286 ldy #64 64 bytes to get in window entry | |
287 ldd <datimg addr of sys DAT image | |
288 pshs u save u | |
289 leau we,u addr of receiver | |
290 os9 F$CpyMem get it | |
291 puls u restore u | |
292 lbcs exit exit on error | |
293 | |
294 | |
295 * check if window ok | |
296 | |
297 lda we,u check msb of screen table address | |
298 cmpa #$ff is it valid ??? | |
299 lbeq error3 send error message | |
300 | |
301 * get screen table entry | |
302 | |
303 ldx we,u address of screen table | |
304 ldy #32 32 bytes in screen table | |
305 ldd <datimg addr of sys DAT image | |
306 pshs u save u | |
307 leau sc,u addr of receiver | |
308 os9 F$CpyMem get it | |
309 puls u restore u | |
310 lbcs exit exit on error | |
311 leax sc,u address of screen table | |
312 ldb 5,x border prn | |
313 stb <bdc save it | |
314 ldb ,x screen type | |
315 stb <stymark | |
316 | |
317 * remove bias to get actual screen type | |
318 | |
319 cmpb #$80 | |
320 bls lowtype | |
321 ldb #4 4 = 16 colors possible | |
322 stb <stymark make that the screen type marker | |
323 ldb #$87 | |
324 subb ,x | |
325 bra getblock | |
326 lowtype equ * | |
327 addb #4 | |
328 getblock equ * | |
329 stb <sctype save the screen type | |
330 decb decrement for indexing | |
331 leax blktable,pcr address of block count table | |
332 lda b,x get block count (via indexing table) | |
333 sta <blockcnt save it | |
334 leax sc,u address of screen table | |
335 lda 1,x get first block used | |
336 sta <scrblock save it | |
337 leax 16,x address of palettes | |
338 stx <paltaddr save it for later | |
339 leax we,u addr of window entry | |
340 | |
341 * get screen start in block | |
342 | |
343 leax $34,x screen start | |
344 lda ,x+ get msb | |
345 suba #$80 ????? | |
346 ldb ,x+ get lsb | |
347 std <offset save screen offset | |
348 ldy ,x++ get screen start coordinates | |
349 sty <wstart save them | |
350 ldd ,x++ get screen size (x,y) | |
351 std <wsize save it | |
352 leax we,u get start of window entry | |
353 leax 5,x addr of cwarea start | |
354 ldy ,x++ working area start coordinates | |
355 sty <cwstart save them | |
356 ldd ,x++ working area size coordinates | |
357 std <cwsize save them | |
358 cmpd <wsize see if its same as total window size | |
359 beq getbpr if it is,skip next section | |
360 | |
361 * adjust block offset to take change working area into account | |
362 | |
363 clr <msb clear temp area | |
364 lda <cwstart x offset of area | |
365 lsla multiply by 2 for attribute bytes | |
366 sta <lsb save it | |
367 lda <cwstart+1 y offset of area | |
368 lsla multiply by 2 for attribute bytes | |
369 ldb <wsize x-size of window | |
370 mul mulitply | |
371 addd <msb add x offset of area | |
372 addd <offset add original block offset | |
373 std <offset save new block offset | |
374 | |
375 * get # of bytes per row and cursor coordinates | |
376 | |
377 getbpr equ * | |
378 ldx #$1075 address of gfx table start pointer | |
379 ldy #2 # of bytes to get | |
380 ldd <datimg addr of sys DAT image | |
381 pshs u save u | |
382 leau msb,u addr of receiver | |
383 os9 F$Cpymem get it | |
384 puls u restore u | |
385 lbcs exit exit on error | |
386 lda <wnum get window entry number | |
387 ldb #$12 size of gfx table entry | |
388 mul get the offset to start of our gfx window entry | |
389 addd #1 add 1 for draw cursor start | |
390 ldx <msb load addr of table start | |
391 leax d,x and add offset | |
392 ldy #4 get 4 bytes | |
393 ldd <datimg addr of sys DAT image | |
394 pshs u save u | |
395 leau drawcrsr,u addr of receiver | |
396 os9 F$Cpymem get it | |
397 puls u restore u | |
398 lbcs exit exit on error | |
399 | |
400 clr <curx clear fields | |
401 clr <cury | |
402 leax we,u address of window entry | |
403 ldd $14,x butes per row | |
404 std <bpr save bytes per row | |
405 | |
406 * get foreground/background prn's | |
407 | |
408 leay stytable,pcr addr of screen type mask table | |
409 ldb <stymark get sty marker byte | |
410 decb decrement for indexing | |
411 leay b,y addr of mask (via indexing) | |
412 ldd $16,x get fore/back palette #'s | |
413 anda ,y strip of bias againt mask | |
414 andb ,y | |
415 sta <fgc save foreground prn | |
416 stb <bgc save background prn | |
417 | |
418 lda $1A,x logic set # | |
419 sta <lset save it | |
420 lda $1B,x block # of font | |
421 ldy $1C,x block offset of font | |
422 lbsr fetchit get group/buffer of font | |
423 std <fontgb save it | |
424 lda $1E,x block # of pset | |
425 ldy $1F,x block offset of pset | |
426 leay -$20,y back off to get header start of pset | |
427 lbsr fetchit get group/buffer of pset | |
428 std <psetgb save it | |
429 lda $28,x block # of gfx cursor | |
430 ldy $29,x block offset of gfx cursor | |
431 lbsr fetchit get group/buffer of gfx cursor | |
432 std <gcurgb save it | |
433 | |
434 ldd $0B,x cursor logical address | |
435 subd 3,x subtract screen logical start | |
436 lbra getcrps get x,y cursor coords | |
437 | |
438 * get block number and offset in block for VDG type screen | |
439 | |
440 vdgscrn equ * | |
441 leax blnkpalt,pcr address of $ff's for vdg palettes | |
442 stx <paltaddr save the addr | |
443 lda #$ff fill char | |
444 sta <fgc no palettes for vdg screen | |
445 sta <bgc | |
446 sta <bdc | |
447 lda #1 vdgflag=1 | |
448 sta <vdgflag | |
449 sta <blockcnt 1 block in screen | |
450 clra | |
451 clrb | |
452 std <wstart window starts at 0,0 | |
453 std <cwstart | |
454 clr <sctype screentype = 0 | |
455 leax devmem,u address of device memory | |
456 ldd $38,x logical screen start addr | |
457 std vdgadr,u msb of vdg address | |
458 lsra divide by 16 | |
459 lsra | |
460 lsra | |
461 lsra | |
462 lsra divide by 2 | |
463 inca add 1 | |
464 lsla multiply by 2 | |
465 deca subtract 1 | |
466 ldx <datimg addr of sys DAT image | |
467 ldb a,x add on block # in map and get the physical block | |
468 stb <scrblock save it | |
469 ldd vdgadr,u get the physical screen address | |
470 anda #%00011111 strip off block # bias | |
471 std <offset save offset within block | |
472 ldd #$2010 32 * 16 screen | |
473 std <cwsize save it | |
474 std <wsize save it | |
475 clr <curx clear cursor offset counters | |
476 clr <cury | |
477 ldd #$0020 32 bytes/row | |
478 std <bpr save it | |
479 leax devmem,u address of device memory | |
480 ldd $3C,x cursor address | |
481 subd $38,x screen address | |
482 | |
483 getcrps equ * | |
484 cmpd <bpr are we done getting row? | |
485 blo gotycur yes..skip this | |
486 subd <bpr subtract bytes/row | |
487 inc <cury increment row # | |
488 bra getcrps and check for more | |
489 | |
490 gotycur equ * | |
491 stb <curx save y cursor pos | |
492 tst <vdgflag is it vdg screen?? | |
493 bne savexcur yes..more processing | |
494 lda <sctype get screen type to determine divisor | |
495 cmpa #5 is it type 5 screen??? | |
496 beq gotxcur go save x cursor position | |
497 lsrb divide by two to get actual offset | |
498 cmpa #8 is it type 7 screen??? | |
499 bne gotxcur go save x cursor position | |
500 lsrb divide by two again | |
501 | |
502 gotxcur equ * | |
503 stb <curx save y cursor pos | |
504 lbra retbuffr go return buffer | |
505 | |
506 savexcur equ * | |
507 leax devmem,u address of device mem | |
508 lda $37,x screen # on display | |
509 bne chkmedrs if not 0 then its medium or hi res | |
510 tst $45,x test med-res flag | |
511 lbeq retbuffr its not hi-res gfx | |
512 | |
513 chkmedrs equ * | |
514 ldb #3 3 bytes per screen table entry | |
515 mul get screen table offset | |
516 leax $4A,x start of screen tables | |
517 leax b,x offset for screen # | |
518 inc <vdgflag =2 for med-res gfx | |
519 clr <offset screen starts at begin of block | |
520 clr <offset+1 | |
521 lda ,x+ get start block | |
522 sta <scrblock save it | |
523 lda ,x+ get block count | |
524 lbne vdghires if there its a hi-res | |
525 ldx #$0180 BPR for med-res vdg screen | |
526 stx <bpr save it for later | |
527 lda #%00010000 default mode of 1 | |
528 leax devmem,u get start of device mem again | |
529 tst $3f,x screen mode | |
530 bpl vdgtyp1 if its is..go save it | |
531 clra make the mode=0 | |
532 | |
533 vdgtyp1 equ * | |
534 ora $66,x foreground color | |
535 sta <sctype thats our screen type | |
536 lbra retbuffr go return buffer | |
537 | |
538 * hi res vdg screen | |
539 | |
540 vdghires equ * | |
541 sta <blockcnt save the block count | |
542 lda ,x get the screen type | |
543 sta <sctype save it | |
544 ldy #$2818 sizex/sizey for screen type 0,1,2 | |
545 ldx #$0280 BPR for screen type 0,1,2 | |
546 cmpa #2 is screen type <= 2 | |
547 bls vdgbpr if yes..go save BPR | |
548 ldy #$5018 BPR for screen types 3,4 | |
549 ldx #$0500 BPR for screen types 3,4 | |
550 | |
551 vdgbpr equ * | |
552 sty <wsize save the size | |
553 sty <cwsize same for current working size | |
554 stx <bpr save the bytes per row | |
555 leax devmem,u get address of device mem again | |
556 leax $6B,x address of palettes | |
557 stx <paltaddr save it for later | |
558 inc <vdgflag =3 (hi res vdg) | |
559 lbra retbuffr | |
560 | |
561 * dump the screen | |
562 | |
563 retbuffr equ * | |
564 ldx <buffaddr address of return buffer | |
565 clra | |
566 sta WI$stat,x status is ok (=0) | |
567 lda <vdgflag | |
568 sta WI$vdg,x | |
569 lda <sctype | |
570 sta WI$sty,x | |
571 lda <scrblock | |
572 sta WI$block,x | |
573 lda <blockcnt | |
574 sta WI$blcnt,x | |
575 ldd <offset | |
576 std WI$offst,x | |
577 lda <wstart | |
578 sta WI$cpx,x | |
579 lda <wstart+1 | |
580 sta WI$cpy,x | |
581 lda <wsize | |
582 sta WI$szx,x | |
583 lda <wsize+1 | |
584 sta WI$szy,x | |
585 lda <cwstart | |
586 sta WI$cwcpx,x | |
587 lda <cwstart+1 | |
588 sta WI$cwcpy,x | |
589 lda <cwsize | |
590 sta WI$cwszx,x | |
591 lda <cwsize+1 | |
592 sta WI$cwszy,x | |
593 lda <curx | |
594 sta WI$curx,x | |
595 lda <cury | |
596 sta WI$cury,x | |
597 ldd <bpr | |
598 std WI$bpr,x | |
599 leay we,u | |
600 lda $19,y | |
601 sta WI$cbsw,x | |
602 lda <bdc | |
603 sta WI$bdprn,x | |
604 lda <fgc | |
605 sta WI$fgprn,x | |
606 lda <bgc | |
607 sta WI$bgprn,x | |
608 lda <lset | |
609 sta WI$Lset,x | |
610 ldd <fontgb | |
611 sta WI$FntGr,x | |
612 stb WI$FntBf,x | |
613 ldd <psetgb | |
614 sta WI$PstGr,x | |
615 stb WI$PstBf,x | |
616 ldd <gcurgb | |
617 sta WI$GcrGr,x | |
618 stb WI$GcrBf,x | |
619 ldd <drawcrsr | |
620 std WI$DrCrx,x | |
621 ldd <drawcrsr+2 | |
622 std WI$DrCry,x | |
623 lda edition,pcr | |
624 sta WI$Edtn,x | |
625 ldd <weaddr | |
626 std WI$weadr,x | |
627 ldd <devmaddr | |
628 std WI$devm,x | |
629 leay WI$pregs,x addr of where to move palettes to | |
630 ldx <paltaddr addr of palettes | |
631 ldd #16 16 bytes to move | |
632 lbsr u$movexy move it | |
633 bra clrexit done so return from sub | |
634 | |
635 badparms equ * | |
636 ldb #E$Param bad parameter error | |
637 bra exit go return it | |
638 | |
639 clrexit clrb no error..clear b reg | |
640 exit equ * | |
641 lds <stackadr restore stack | |
642 puls u,dp restore u and dp registers | |
643 clra clear carry bit | |
644 tstb | |
645 beq return | |
646 coma set carry bit | |
647 return equ * | |
648 rts | |
649 | |
650 zapblock equ * | |
651 sta ,x+ | |
652 decb | |
653 bne zapblock | |
654 rts | |
655 | |
656 * fetch 2 bytes from block [a] at offset [y]+3 | |
657 | |
658 | |
659 | |
660 fetchit equ * | |
661 clr <minidat | |
662 sta <minidat+1 | |
663 bne fetchok jump if valid block # | |
664 clra else clear group # | |
665 clrb clear buffer # | |
666 rts | |
667 | |
668 fetchok equ * | |
669 pshs x save x | |
670 leax 3,y poistion to group # | |
671 tfr x,d put in d for arithmetic | |
672 anda #%00011111 strip off hig order bytes | |
673 tfr d,x and put back in x | |
674 leay minidat,u adr of temp DAT image | |
675 tfr y,d put in d for os9 call | |
676 ldy #2 bytes to get | |
677 pshs u save u | |
678 leau bfngrp,u addr of receving field | |
679 os9 F$Cpymem get it | |
680 puls u restore u | |
681 lbcs exit exit on error | |
682 ldd <bfngrp put it in d for return | |
683 puls x restore x | |
684 rts | |
685 | |
686 * move [d] bytes from [x] to [y] | |
687 | |
688 u$movexy pshs u | |
689 tfr d,u | |
690 movexy10 lda ,x+ | |
691 sta ,y+ | |
692 leau -1,u | |
693 cmpu #0 | |
694 bne movexy10 | |
695 puls u,pc | |
696 | |
697 error1 equ * | |
698 ldb #1 error number | |
699 pshs b save error # | |
700 leax errmsg1,pcr address of error msg | |
701 ldd #errm1ln length of error message | |
702 bra moverr go move it | |
703 | |
704 error2 equ * | |
705 ldb #2 error number | |
706 pshs b save error # | |
707 leax errmsg2,pcr address of error msg | |
708 ldd #errm2ln length of error message | |
709 bra moverr go move it | |
710 | |
711 error3 equ * | |
712 ldb #3 error number | |
713 pshs b save error # | |
714 leax errmsg3,pcr address of error msg | |
715 ldd #errm3ln length of error message | |
716 bra moverr go move it | |
717 | |
718 moverr equ * | |
719 ldy <buffaddr address of return buffer | |
720 leay WI$ErMsg,y address of error message | |
721 lbsr u$movexy | |
722 puls b | |
723 | |
724 storstat equ * | |
725 ldy <buffaddr address of return buffer | |
726 stb WI$Stat,y save the status byte | |
727 lbra clrexit done | |
728 | |
729 | |
730 smllbuff equ * | |
731 ldb #$ff buffer too small status # | |
732 bra storstat go store status # and exit | |
733 | |
734 | |
735 emod | |
736 eom equ * | |
2322
61fb37b19edd
Edition #3 - for vtio instead of cc3io Willard Goosey
aaronwolfe
parents:
2127
diff
changeset
|
737 |