|
|
1.1.1.3 root 1: SECTION code,code
1.1 root 2: ; This file can be translated with A68k or PhxAss and then linked with BLink
3: ; to produce an Amiga executable. Make sure it does not contain any
4: ; relocations, then run it through the filesys.sh script
1.1.1.2 root 5: ;
6: ; Patrick: It also works with SAS/C asm+slink, but I had to remove
7: ; the .l from jsr.l and jmp.l.
1.1.1.3 root 8: ; Toni Wilen: modified SECTION, compiles now with AsmOne and clones(?)
9: ; Removed absolute RT_AREA references
1.1 root 10:
11: dc.l 16
12: our_seglist:
13: dc.l 0 ;/* NextSeg */
14: start:
15: bra filesys_mainloop
16: dc.l make_dev-start
17: dc.l filesys_init-start
18: dc.l exter_server-start
19: dc.l bootcode-start
1.1.1.3 root 20: dc.l setup_exter-start
1.1.1.4 ! root 21: dc.l 0 ; /* p96vsyncfix */
! 22: dc.l mousehack_x-start
1.1 root 23:
24: bootcode:
25: lea.l doslibname(pc),a1
1.1.1.2 root 26: jsr -96(a6) ; FindResident
1.1 root 27: move.l d0,a0
28: move.l 22(a0),d0
29: move.l d0,a0
30: jsr (a0)
31: rts
32:
33: filesys_init:
34: movem.l d0-d7/a0-a6,-(sp)
1.1.1.4 ! root 35: move.l 4,a6
1.1.1.3 root 36: move.w #$FFFC,d0 ; filesys base
37: bsr getrtbase
38: move.l (a0),a5
1.1 root 39: lea.l explibname(pc),a1 ; expansion lib name
40: moveq.l #36,d0
41: moveq.l #0,d5
1.1.1.2 root 42: jsr -552(a6) ; OpenLibrary
1.1 root 43: tst.l d0
44: bne.b FSIN_explibok
45: lea.l explibname(pc),a1 ; expansion lib name
46: moveq.l #0,d0
47: moveq.l #1,d5
1.1.1.2 root 48: jsr -552(a6) ; OpenLibrary
1.1 root 49: FSIN_explibok:
50: move.l d0,a4
51: moveq.l #88,d0
52: moveq.l #1,d1 ; MEMF_PUBLIC
1.1.1.4 ! root 53: jsr -198(a6); AllocMem
1.1 root 54: move.l d0,a3 ; param packet
55:
56: moveq.l #84,d7 ; initialize it
57: FSIN_loop:
58: move.l 0(a5,d7.l),0(a3,d7.l)
59: subq.l #4,d7
60: bcc.b FSIN_loop
61:
62: moveq.l #0,d6
63: FSIN_init_units:
64: cmp.l $10c(a5),d6
65: bcc.b FSIN_units_ok
66: move.l a3,a0
67: movem.l d6/a3,-(sp)
68: move.l #1,d7
1.1.1.2 root 69: bsr.w make_dev
1.1 root 70: movem.l (sp)+,d6/a3
71: addq.l #$1,d6
72: bra.b FSIN_init_units
73:
74: FSIN_units_ok:
1.1.1.4 ! root 75: move.l 4,a6
1.1 root 76: move.l a4,a1
1.1.1.2 root 77: jsr -414(a6) ; CloseLibrary
1.1.1.3 root 78: move.w #$FF80,d0
79: bsr.w getrtbase
80: jsr (a0)
1.1 root 81: moveq.l #3,d1
82: moveq.l #-10,d2
83: move.l #$200000,a0
84: sub.l a0,d0
85: bcs.b FSIN_chip_done
86: beq.b FSIN_chip_done
87: moveq.l #0,d4
88: move.l d4,a1
89: jsr -618(a6)
90: FSIN_chip_done
91: movem.l (sp)+,d0-d7/a0-a6
92: general_ret:
93: rts
94:
1.1.1.2 root 95: exter_data:
96: exter_server:
97: movem.l a2,-(sp)
1.1.1.3 root 98: move.w #$FF50,d0
99: bsr.w getrtbase
1.1.1.2 root 100: moveq.l #0,d0
1.1.1.3 root 101: jsr (a0)
1.1.1.2 root 102: tst.l d0
103: beq.b exter_server_exit
104: ; This is the hard part - we have to send some messages.
1.1.1.4 ! root 105: move.l 4,a6
1.1.1.2 root 106: EXTS_loop:
1.1.1.3 root 107: move.w #$FF50,d0
108: bsr.w getrtbase
1.1.1.2 root 109: moveq.l #2,d0
1.1.1.3 root 110: jsr (a0)
1.1.1.2 root 111: cmp.l #1,d0
112: blt.b EXTS_done
113: bgt.b EXTS_signal_reply
114: jsr -366(a6) ; PutMsg
115: bra.b EXTS_loop
116: EXTS_signal_reply:
117: cmp.l #2,d0
118: bgt.b EXTS_reply
119: move.l d1,d0
120: jsr -$144(a6) ; Signal
121: bra.b EXTS_loop
122: EXTS_reply:
1.1.1.3 root 123: cmp.l #3,d0
124: bgt.b EXTS_cause
125: jsr -$17a(a6) ; ReplyMsg
126: bra.b EXTS_loop
127: EXTS_cause:
128: cmp.l #4,d0
129: bgt.b EXTS_jump
130: jsr -$b4(a6) ; Cause
131: bra.b EXTS_loop
132: EXTS_jump:
133: movem.l a2/a5,-(sp)
134: move.l a1,a2 ;CDXL structure
135: move.l 20(a2),a1
136: move.l 24(a2),a5
137: move.l a2,-(sp)
138: jsr (a5) ; cd.device CD_READXL callback
139: move.l (sp)+,d2
140: clr.l 24(a2) ; ugly sync-hack
141: movem.l (sp)+,a2/a5
1.1.1.2 root 142: EXTS_done:
1.1.1.3 root 143: move.w #$FF50,d0
144: bsr.w getrtbase
1.1.1.2 root 145: moveq.l #4,d0
1.1.1.3 root 146: jsr (a0)
1.1.1.2 root 147: moveq.l #1,d0 ; clear Z - it was for us.
148: exter_server_exit:
149: movem.l (sp)+,a2
150: rts
151:
1.1 root 152: setup_exter:
1.1.1.4 ! root 153: ; bsr.w mousehack_init
1.1 root 154: moveq.l #26,d0
155: move.l #$10001,d1
1.1.1.4 ! root 156: jsr -198(a6); AllocMem
1.1 root 157: move.l d0,a1
158: lea.l exter_name(pc),a0
159: move.l a0,10(a1)
160: lea.l exter_data(pc),a0
161: move.l a0,14(a1)
162: lea.l exter_server(pc),a0
163: move.l a0,18(a1)
1.1.1.3 root 164: move.b #200,9(a1)
165: move.b #2,8(a1)
1.1 root 166: moveq.l #13,d0
1.1.1.2 root 167: jmp -168(a6) ; AddIntServer
1.1 root 168:
169: make_dev: ; IN: A0 param_packet, D6: unit_no, D7: boot, A4: expansionbase
170:
1.1.1.3 root 171: move.l a0,-(sp)
172: move.w #$FFFC,d0 ; filesys base
173: bsr.w getrtbase
174: move.l (a0),a5
1.1.1.4 ! root 175: move.w #$FF28,d0 ; fill in unit-dependent info (filesys_dev_storeinfo)
1.1.1.3 root 176: bsr.w getrtbase
177: move.l a0,a1
178: move.l (sp)+,a0
179: jsr (a1)
1.1 root 180: move.l d0,d3
181:
182: ; Don't init hardfiles if < V36
183: and.l d5,d0
1.1.1.2 root 184: bne.w general_ret
1.1 root 185:
186: move.l a4,a6
1.1.1.4 ! root 187: move.l a0,-(sp)
1.1.1.2 root 188: jsr -144(a6) ; MakeDosNode()
1.1.1.4 ! root 189: move.l (sp)+,a0 ; parmpacket
! 190: move.l a0,a1
1.1 root 191: move.l d0,a3 ; devicenode
1.1.1.4 ! root 192: move.w #$FF20,d0 ; record in ui.startup (filesys_dev_remember)
1.1.1.3 root 193: bsr.w getrtbase
194: jsr (a0)
1.1 root 195: moveq.l #0,d0
196: move.l d0,8(a3) ; dn_Task
197: move.l d0,16(a3) ; dn_Handler
198: move.l d0,32(a3) ; dn_SegList
199:
1.1.1.4 ! root 200: move.l d3,d0
! 201: move.b 79(a1),d3 ; bootpri
! 202: tst.l d0
1.1 root 203: bne.b MKDV_doboot
204:
205: MKDV_is_filesys:
206: move.l #4000,20(a3) ; dn_StackSize
207: lea.l our_seglist(pc),a1
208: move.l a1,d0
209: lsr.l #2,d0
210: move.l d0,32(a3) ; dn_SegList
1.1.1.4 ! root 211: moveq.l #-1,d0
! 212: move.l d0,36(a3) ; dn_GlobalVec
1.1 root 213:
214: MKDV_doboot:
215: tst.l d7
216: beq.b MKDV_noboot
217:
1.1.1.4 ! root 218: move.l 4,a6
1.1 root 219: moveq.l #20,d0
220: moveq.l #0,d1
1.1.1.4 ! root 221: jsr -198(a6); AllocMem
1.1 root 222: move.l d0,a1 ; bootnode
223: moveq.l #0,d0
224: move.l d0,(a1)
225: move.l d0,4(a1)
226: move.w d0,14(a1)
1.1.1.4 ! root 227: move.w #$1000,d0
! 228: or.b d3,d0
1.1 root 229: move.w d0,8(a1)
230: move.l $104(a5),10(a1) ; filesys_configdev
231: move.l a3,16(a1) ; devicenode
232: lea.l 74(a4),a0 ; MountList
1.1.1.2 root 233: jmp -270(a6) ; Enqueue()
1.1 root 234:
235: MKDV_noboot:
236: move.l a3,a0
237: moveq.l #0,d1
238: move.l d1,a1
239: moveq.l #-1,d0
240: move.l a4,a6 ; expansion base
1.1.1.2 root 241: jmp -150(a6) ; AddDosNode
1.1 root 242:
243: filesys_mainloop:
1.1.1.4 ! root 244: move.l 4,a6
1.1 root 245: moveq.l #0,d0
246: move.l d0,a1
247: jsr -294(a6) ; FindTask
248: move.l d0,a0
249: lea.l $5c(a0),a5 ; pr_MsgPort
250:
251: ; Open DOS library
252: lea.l doslibname(pc),a1
253: moveq.l #0,d0
254: jsr -552(a6) ; OpenLibrary
255: move.l d0,a2
256:
257: ; Allocate some memory. Usage:
258: ; 0: lock chain
259: ; 4: command chain
260: ; 8: second thread's lock chain
261: ; 12: dummy message
262: ; 32: the volume (80+44+1 bytes)
1.1.1.4 ! root 263: ; 157: mousehack started-flag
! 264: move.l #80+44+1+20+12+1,d0
1.1 root 265: move.l #$10001,d1 ; MEMF_PUBLIC | MEMF_CLEAR
1.1.1.4 ! root 266: jsr -198(a6); AllocMem
1.1 root 267: move.l d0,a3
268: moveq.l #0,d6
269: move.l d6,(a3)
270: move.l d6,4(a3)
271: move.l d6,8(a3)
272:
273: moveq.l #0,d5 ; No commands queued.
274:
275: ; Fetch our startup packet
276: move.l a5,a0
277: jsr -384(a6) ; WaitPort
278: move.l a5,a0
279: jsr -372(a6) ; GetMsg
280: move.l d0,a4
281: move.l 10(a4),d3 ; ln_Name
1.1.1.3 root 282: move.w #$FF40,d0
283: bsr.w getrtbase
1.1 root 284: moveq.l #0,d0
1.1.1.3 root 285: jsr (a0)
1.1.1.4 ! root 286: bra.w FSML_Reply
1.1 root 287:
288: ; We abuse some of the fields of the message we get. Offset 0 is
289: ; used for chaining unprocessed commands, and offset 1 is used for
290: ; indicating the status of a command. 0 means the command was handed
291: ; off to some UAE thread and did not complete yet, 1 means we didn't
292: ; even hand it over yet because we were afraid that might blow some
293: ; pipe limit, and -1 means the command was handed over and has completed
294: ; processing by now, so it's safe to reply to it.
295:
296: FSML_loop:
297: move.l a5,a0
298: jsr -384(a6) ; WaitPort
299: move.l a5,a0
300: jsr -372(a6) ; GetMsg
301: move.l d0,a4
302: move.l 10(a4),d3 ; ln_Name
303: bne.b FSML_FromDOS
304:
305: ; It's a dummy packet indicating that some queued command finished.
1.1.1.3 root 306: move.w #$FF50,d0
307: bsr.w getrtbase
1.1 root 308: moveq.l #1,d0
1.1.1.3 root 309: jsr (a0)
1.1 root 310: ; Go through the queue and reply all those that finished.
311: lea.l 4(a3),a2
312: move.l (a2),a0
313: FSML_check_old:
314: move.l a0,d0
315: beq.b FSML_loop
316: move.l (a0),a1
317: move.l d0,a0
318: ; This field may be accessed concurrently by several UAE threads.
319: ; This _should_ be harmless on all reasonable machines.
320: move.l 4(a0),d0
321: bpl.b FSML_check_next
322: movem.l a0/a1,-(a7)
323: move.l 10(a0),a4
324: bsr.b ReplyOne
325: subq.l #1,d5 ; One command less in the queue
326: movem.l (a7)+,a0/a1
327: move.l a1,(a2)
328: move.l a1,a0
329: bra.b FSML_check_old
330: FSML_check_next:
331: move.l a0,a2
332: move.l a1,a0
333: bra.b FSML_check_old
334:
335: FSML_FromDOS:
336: ; Limit the number of outstanding started commands. We can handle an
337: ; unlimited number of unstarted commands.
338: cmp.l #20,d5
339: bcs FSML_DoCommand
340: ; Too many commands queued.
341: moveq.l #1,d0
342: move.l d0,4(a4)
343: bra.b FSML_Enqueue
344:
345: FSML_DoCommand:
346: bsr.b LockCheck ; Make sure there are enough locks for the C code to grab.
1.1.1.3 root 347: move.w #$FF30,d0
348: bsr.w getrtbase
349: jsr (a0)
1.1 root 350: tst.l d0
351: beq.b FSML_Reply
352: ; The command did not complete yet. Enqueue it and increase number of
353: ; queued commands
354: ; The C code already set 4(a4) to 0
355: addq.l #1,d5
356: FSML_Enqueue:
357: move.l 4(a3),(a4)
358: move.l a4,4(a3)
359: bra.b FSML_loop
360:
361: FSML_Reply:
362: move.l d3,a4
363: bsr.b ReplyOne
1.1.1.3 root 364: bra.w FSML_loop
1.1 root 365:
366: ReplyOne:
367: move.l (a4),a1 ; dp_Link
368: move.l 4(a4),a0 ; dp_Port
369: move.l a5,4(a4)
370: jmp -366(a6) ; PutMsg
371:
372: ; ugly code to avoid calling AllocMem / FreeMem from native C code.
373: ; We keep a linked list of 3 locks. In theory, only one should ever
374: ; be used. Before handling every packet, we check that the list has the
375: ; right length.
376:
377: LockCheck:
378: move.l d5,-(a7)
379: moveq.l #-4,d5 ; Keep three locks
380: move.l (a3),a2
381: move.l a2,d7
382: LKCK_Loop:
383: move.l a2,d1
384: beq LKCK_ListEnd
385: addq.l #1,d5
386: beq.b LKCK_TooMany
387: move.l a2,a1
388: move.l (a2),a2
389: bra.b LKCK_Loop
390: LKCK_ListEnd:
391: addq.l #1,d5
392: beq.b LKCK_ret
393: move.l d7,a2
394: moveq.l #24,d0 ; sizeof Lock is 20, 4 for chain
395: moveq.l #1,d1 ; MEMF_PUBLIC
1.1.1.4 ! root 396: jsr -198(a6); AllocMem
1.1 root 397: addq.w #1,d6
398: move.l d0,a2
399: move.l d7,(a2)
400: move.l a2,d7
401: bra.b LKCK_ListEnd
402: LKCK_TooMany:
403: move.l (a2),d0 ; We have too many, but we tolerate that to some extent.
404: beq.b LKCK_ret
405: move.l d0,a0
406: move.l (a0),d0
407: beq.b LKCK_ret
408: move.l d0,a0
409: move.l (a0),d0
410: beq.b LKCK_ret
411:
412: moveq.l #0,d0 ; Now we are sure that we really have too many. Delete some.
413: move.l d0,(a1)
414: LKCK_TooManyLoop:
415: move.l a2,a1
416: move.l (a1),a2
417: moveq.l #24,d0
418: jsr -210(a6) ; FreeMem
419: add.l #$10000,d6
420: move.l a2,d0
421: bne.b LKCK_TooManyLoop
422: LKCK_ret:
423: move.l d7,(a3)
424: move.l (a7)+,d5
425: rts
426:
1.1.1.3 root 427: getrtbase:
428: lea start-8-4(pc),a0
429: and.l #$FFFF,d0
430: add.l d0,a0
431: rts
432:
1.1.1.4 ! root 433: ; mouse hack
! 434:
! 435: newlist:
! 436: move.l a0,(a0)
! 437: addq.l #4,(a0)
! 438: clr.l 4(a0)
! 439: move.l a0,8(a0)
! 440: rts
! 441:
! 442: createport:
! 443: movem.l d2/a2/a6,-(sp)
! 444: move.l 4,a6
! 445: moveq #-1,d0
! 446: jsr -$014a(a6) ;AllocSignal
! 447: sub.l a0,a0
! 448: move.l d0,d2
! 449: bmi.s cp_f
! 450: moveq #34,d0
! 451: move.l #65536+1,d1
! 452: jsr -198(a6); AllocMem
! 453: sub.l a0,a0
! 454: move.l d0,a2
! 455: tst.l d0
! 456: beq.s cp_f
! 457: move.b #4,8(a2) ;NT_MSGPORT
! 458: move.b d2,15(a2)
! 459: sub.l a1,a1
! 460: jsr -$0126(a6) ;FindTask
! 461: move.l d0,16(a2)
! 462: lea 20(a2),a0
! 463: bsr.w newlist
! 464: move.l a2,a0
! 465: cp_f: move.l a0,d0
! 466: movem.l (sp)+,d2/a2/a6
! 467: rts
! 468:
! 469: createio:
! 470: movem.l d2/a2/a6,-(sp)
! 471: move.l 4,a6
! 472: tst.l d0
! 473: beq.s cio_f
! 474: move.l d0,a2
! 475: moveq #48,d2
! 476: move.l d2,d0
! 477: move.l #65536+1,d1
! 478: jsr -198(a6); AllocMem
! 479: move.l d0,a0
! 480: move.b #10,8(a0) ;NT_MESSAGE
! 481: move.l d2,18(a0)
! 482: move.l a2,14(a0)
! 483: cio_f: movem.l (sp)+,d2/a2/a6
! 484: rts
! 485:
! 486: createtask:
! 487: movem.l d2/d3/a2/a3/a6,-(sp)
! 488: move.l 4,a6
! 489: move.l a0,d2
! 490: move.l a1,d3
! 491: move.l #92+2048,d0
! 492: move.l #65536+1,d1
! 493: jsr -198(a6); AllocMem
! 494: tst.l d0
! 495: beq.b ct_f
! 496: move.l d0,a2
! 497: move.b #1,8(a2) ;NT_TASK
! 498: move.l d2,10(a2)
! 499: lea 92(a2),a3
! 500: move.l a3,58(a2)
! 501: lea 2048(a3),a3
! 502: move.l a3,62(a2)
! 503: move.l a3,54(a2)
! 504: move.l a2,a1
! 505: move.l d3,a2
! 506: sub.l a3,a3
! 507: jsr -$011a(a6) ;AddTask
! 508: ct_f: movem.l (sp)+,d2/d3/a2/a3/a6
! 509: rts
! 510:
! 511: mousehack_e: dc.w 0
! 512: mousehack_x: dc.w 0
! 513: mousehack_y: dc.w 0
! 514:
! 515: MH_INT = 0
! 516: MH_FOO = (MH_INT+22)
! 517: MH_IEV = (MH_FOO+16)
! 518: MH_IO = (MH_IEV+22)
! 519: MH_TM = (MH_IO+4)
! 520: MH_END = (MH_TM+4)
! 521:
! 522: mousehack_init:
! 523: move.l a0,-(sp)
! 524: lea mhname(pc),a0
! 525: lea mousehack_task(pc),a1
! 526: bsr createtask
! 527: move.l (sp)+,a0
! 528: rts
! 529:
! 530: mousehack_task:
! 531: move.l 4,a6
! 532:
! 533: moveq #-1,d0
! 534: jsr -$014a(a6) ;AllocSignal
! 535: moveq #0,d2
! 536: bset d0,d2
! 537:
! 538: sub.l a1,a1
! 539: jsr -$0126(a6) ;FindTask
! 540: move.l d0,a4
! 541:
! 542: moveq #20,d0
! 543: move.l a4,a1
! 544: jsr -$012c(a6) ;SetTaskPri
! 545:
! 546: moveq #0,d0
! 547: move.w #MH_END,d0
! 548: move.l #65536+1,d1
! 549: jsr -198(a6); AllocMem
! 550: move.l d0,a5
! 551:
! 552: bsr.w createport
! 553: bsr.w createio
! 554: move.l d0,MH_IO(a5)
! 555: beq mht_f
! 556:
! 557: bsr.w createport
! 558: bsr.w createio
! 559: move.l d0,MH_TM(a5)
! 560: beq mht_f
! 561:
! 562: lea MH_FOO(a5),a3
! 563: move.l a4,12(a3);task
! 564: move.l d2,8(a3) ;sigmask
! 565: moveq #-1,d0
! 566: move.l d0,(a3) ;mx
! 567: move.l d0,4(a3) ;my
! 568:
! 569: lea MH_INT(a5),a1
! 570: move.b #2,8(a1) ;NT_INTERRUPT
! 571: move.b #5,9(a1) ;priority
! 572: lea mhname(pc),a0
! 573: move.l a0,10(a1)
! 574: lea mousehackint(pc),a0
! 575: move.l a0,18(a1)
! 576: move.l a3,14(a1)
! 577: moveq #5,d0 ;INTB_VERTB
! 578: jsr -$00a8(a6)
! 579: moveq #0,d7
! 580: moveq #0,d6
! 581: bra.s mhloop
! 582: mht_f: rts
! 583:
! 584: mhloop
! 585: move.l d2,d0
! 586: jsr -$013e(a6) ;Wait
! 587:
! 588: ; Since we're starting up early in the boot process,
! 589: ; it's not guaranteed that intuition or the devices are
! 590: ; available yet.
! 591: tst.l d7
! 592: bne.b mh_gotintuition
! 593:
! 594: moveq #0,d0
! 595: lea intlibname(pc),a1
! 596: jsr -$0228(a6)
! 597: move.l d0,d7
! 598: beq.b mhloop
! 599:
! 600: mh_gotintuition:
! 601: btst #1,d6
! 602: bne.b mh_gotinput
! 603: move.l MH_IO(a5),a1
! 604: lea inp_dev(pc),a0
! 605: moveq #0,d0
! 606: moveq #0,d1
! 607: jsr -$01bc(a6) ;OpenDevice
! 608: tst.l d0
! 609: bne mhloop
! 610: bset #1,d6
! 611:
! 612: mh_gotinput:
! 613: btst #2,d6
! 614: bne.b mh_gottimer
! 615: move.l MH_TM(a5),a1
! 616: lea tim_dev(pc),a0
! 617: moveq #0,d0
! 618: moveq #0,d1
! 619: jsr -$01bc(a6) ;OpenDevice
! 620: tst.l d0
! 621: bne mhloop
! 622: bset #2,d6
! 623:
! 624: mh_gottimer:
! 625: move.l MH_IO(a5),a1
! 626: lea MH_IEV(a5),a2
! 627: move.w #11,28(a1) ;IND_WRITEEVENT
! 628: move.l #22,36(a1) ;sizeof(struct InputEvent)
! 629: move.l a2,40(a1)
! 630: move.b #1,30(a1) ;IOF_QUICK
! 631:
! 632: move.b #4,4(a2) ;IECLASS_POINTERPOS
! 633: clr.b 5(a2) ;ie_SubClass
! 634: clr.w 6(a2) ;ie_Code
! 635: clr.w 8(a2) ;ie_Qualifier
! 636:
! 637: move.l d7,a0 ;intbase
! 638:
! 639: move.l MH_FOO+0(a5),d0
! 640: move.w 34+14(a0),d1
! 641: add.w d1,d1
! 642: sub.w d1,d0
! 643: move.w d0,10(a2)
! 644:
! 645: move.l MH_FOO+4(a5),d0
! 646: move.w 34+12(a0),d1
! 647: add.w d1,d1
! 648: sub.w d1,d0
! 649: ext.l d0
! 650: move.w d0,12(a2)
! 651:
! 652: move.l MH_TM(a5),a1
! 653: move.w #10,28(a1) ;TR_GETSYSTIME
! 654: move.b #1,30(a1) ;IOF_QUICK
! 655: jsr -$01c8(a6) ;DoIO
! 656: move.l MH_TM(a5),a1
! 657: move.l 32(a1),14(a2)
! 658: move.l 36(a1),18(a2)
! 659:
! 660: move.l MH_IO(a5),a1
! 661: jsr -$01c8(a6) ;DoIO
! 662:
! 663: bra.w mhloop
! 664:
! 665: mousehackint:
! 666: move.w mousehack_x(pc),d0
! 667: ext.l d0
! 668: move.w mousehack_y(pc),d1
! 669: ext.l d1
! 670: cmp.l (a1),d0
! 671: bne .l1
! 672: cmp.l 4(a1),d1
! 673: beq .l2
! 674: .l1 move.l d1,4(a1)
! 675: move.l d0,(a1)
! 676: move.l 8(a1),d0
! 677: move.l 12(a1),a1
! 678: move.l 4,a6
! 679: jsr -$0144(a6) ; Signal
! 680: .l2 lea $dff000,a0
! 681: moveq #0,d0
! 682: rts
! 683:
! 684: inp_dev: dc.b 'input.device',0
! 685: tim_dev: dc.b 'timer.device',0
! 686: mhname: dc.b 'UAE mouse hack',0
1.1 root 687: exter_name: dc.b 'UAE filesystem',0
688: doslibname: dc.b 'dos.library',0
1.1.1.4 ! root 689: intlibname: dc.b 'intuition.library',0
1.1 root 690: explibname: dc.b 'expansion.library',0
691: END
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.