Mercurial > hg > Members > kono > nitros9-code
annotate level2/modules/mc09clock.asm @ 3255:d0e8324af298
level3: nitro module: Use KrnBlk instead of hardcoded $3F
Helps porting to non-CoCo3 platforms.
author | Tormod Volden <debian.tormod@gmail.com> |
---|---|
date | Wed, 29 Aug 2018 08:44:37 +0200 |
parents | b79920779783 |
children |
rev | line source |
---|---|
3131
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
1 ******************************************************************** |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
2 * Clock - Clock for OS-9 Level Two/NitrOS-9 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
3 * |
3160
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
4 * Clock module for multicomp09 (mc09l2) |
3131
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
5 * |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
6 * Based on Microware/Tandy Clock Module for CC3/L2 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
7 * |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
8 * $Id$ |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
9 * |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
10 * Edt/Rev YYYY/MM/DD Modified by |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
11 * Comment |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
12 * ------------------------------------------------------------------ |
3160
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
13 * 2017/01/29 Neal Crook |
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
14 * Created from clock.asm version 9r5. This version for 50Hz timer on |
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
15 * multicomp09 (mc09l2). |
3131
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
16 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
17 nam Clock |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
18 ttl Clock for OS-9 Level Two/NitrOS-9 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
19 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
20 TkPerTS equ 2 ticks per time slice |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
21 |
3160
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
22 use defsfile |
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
23 * Need to NOT be using this!! But it is the source of: |
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
24 |
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
25 use cocovtio.d |
3131
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
26 |
3160
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
27 tylg set Systm+Objct |
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
28 atrv set ReEnt+rev |
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
29 rev equ 5 |
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
30 edition equ 9 |
3131
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
31 |
3160
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
32 *------------------------------------------------------------ |
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
33 * For a detailed hardware description of the Multicomp09 |
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
34 * timer, refer to mc09.d |
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
35 * |
3131
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
36 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
37 *------------------------------------------------------------ |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
38 * |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
39 * Start of module |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
40 * |
3160
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
41 mod len,name,tylg,atrv,init,0 |
3131
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
42 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
43 name fcs "Clock" |
3160
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
44 fcb edition |
3131
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
45 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
46 * |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
47 * Table to set up Service Calls: |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
48 * |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
49 NewSvc fcb F$Time |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
50 fdb F.Time-*-2 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
51 fcb F$VIRQ |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
52 fdb F.VIRQ-*-2 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
53 fcb F$Alarm |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
54 fdb F.ALARM-*-2 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
55 fcb F$STime |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
56 fdb F.STime-*-2 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
57 fcb $80 end of service call installation table |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
58 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
59 *--------------------------------------------------------- |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
60 * IRQ Handling starts here. |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
61 * |
3160
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
62 * For Multicomp09, called 50 times/s ie once every 20ms |
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
63 * |
3131
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
64 * Caveat: There may not be a stack at this point, so avoid using one. |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
65 * Stack is set up by the kernel between here and SvcVIRQ. |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
66 * |
3160
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
67 SvcIRQ |
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
68 |
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
69 * The increment sets N depending upon whether the timer interrupted |
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
70 ldx <D.VIRQ Routine to be invoked from the kernel |
3131
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
71 clr <D.QIRQ ---x IS clock IRQ |
3160
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
72 inc TIMER |
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
73 bmi ContIRQ Timer interrupt |
3131
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
74 |
3160
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
75 NoClock leax DoPoll,pcr If not timer IRQ, just poll IRQ source |
3131
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
76 lda #$FF |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
77 sta <D.QIRQ |
3160
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
78 |
3131
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
79 ContIRQ stx <D.SvcIRQ |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
80 jmp [D.XIRQ] Chain through Kernel to continue IRQ handling |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
81 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
82 *------------------------------------------------------------ |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
83 * |
3160
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
84 * IRQ handling re-enters here (from Kernel) on Timer interrupt |
3131
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
85 * |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
86 * - Count down VIRQ timers, mark ones that are done |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
87 * - Call DoPoll/DoToggle to service VIRQs and IRQs and reset GIME |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
88 * - Call Keyboard scan |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
89 * - Update time variables |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
90 * - At end of minute, check alarm |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
91 * |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
92 SvcVIRQ clra Flag if we find any VIRQs to service |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
93 pshs a |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
94 ldy <D.CLTb Get address of VIRQ table |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
95 bra virqent |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
96 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
97 virqloop equ * |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
98 IFGT Level-2 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
99 ldd 2,y Get Level 3 extended map type |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
100 orcc #IntMasks |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
101 sta >$0643 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
102 stb >$0645 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
103 std >DAT.Regs+1 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
104 andcc #^IntMasks |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
105 ENDC |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
106 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
107 ldd Vi.Cnt,x Decrement tick count |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
108 subd #$0001 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
109 bne notzero Is this one done? |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
110 lda Vi.Stat,x Should we reset? |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
111 bmi doreset |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
112 lbsr DelVIRQ No, delete this entry |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
113 doreset ora #$01 Mark this VIRQ as triggered. |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
114 sta Vi.Stat,x |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
115 lda #$80 Add VIRQ as interrupt source |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
116 sta ,s |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
117 ldd Vi.Rst,x Reset from Reset count. |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
118 notzero std Vi.Cnt,x |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
119 virqent ldx ,y++ |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
120 bne virqloop |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
121 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
122 IFGT Level-2 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
123 puls d |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
124 orcc #Carry |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
125 stb >$0643 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
126 stb >DAT.Regs+1 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
127 incb |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
128 stb >$0645 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
129 stb >DAT.Regs+1 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
130 andcc #^IntMasks |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
131 ELSE |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
132 puls a Get VIRQ status flag: high bit set if VIRQ |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
133 ENDC |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
134 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
135 ora <D.IRQS Check to see if other hardware IRQ pending. |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
136 bita #%10110111 Any V/IRQ interrupts pending? |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
137 beq toggle |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
138 IFGT Level-2 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
139 lbsr DoPoll Yes, go service them. |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
140 ELSE |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
141 bsr DoPoll Yes, go service them. |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
142 ENDC |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
143 bra KbdCheck |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
144 toggle equ * |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
145 IFGT Level-2 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
146 lbsr DoToggle No, toggle GIME anyway |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
147 ELSE |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
148 bsr DoToggle No, toggle GIME anyway |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
149 ENDC |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
150 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
151 KbdCheck equ * |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
152 IFGT Level-2 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
153 lda >$0643 grab current map type |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
154 ldb >$0645 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
155 pshs d save it |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
156 orcc #IntMasks IRQs off |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
157 lda >$0660 SCF local memory ---x |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
158 sta >$0643 into DAT image ---x |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
159 sta >DAT.Regs+1 and into RAM ---x |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
160 inca |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
161 sta >$0645 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
162 sta >DAT.Regs+2 map in SCF, CC3IO, WindInt, etc. |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
163 ENDC |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
164 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
165 jsr [>D.AltIRQ] go update mouse, gfx cursor, keyboard, etc. |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
166 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
167 IFGT Level-2 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
168 puls d restore original map type ---x |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
169 orcc #IntMasks |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
170 sta >$0643 into system DAT image ---x |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
171 stb >$0645 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
172 std >DAT.Regs+1 and into RAM ---x |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
173 andcc #$AF |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
174 ENDC |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
175 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
176 dec <D.Tick End of second? |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
177 bne VIRQend No, skip time update and alarm check |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
178 lda #TkPerSec Reset tick count |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
179 sta <D.Tick |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
180 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
181 * ATD: Modified to call real time clocks on every minute ONLY. |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
182 inc <D.Sec go up one second |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
183 lda <D.Sec grab current second |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
184 cmpa #60 End of minute? |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
185 blo VIRQend No, skip time update and alarm check |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
186 clr <D.Sec Reset second count to zero |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
187 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
188 * |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
189 * Call GetTime entry point in Clock2 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
190 * |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
191 ldx <D.Clock2 get entry point to Clock2 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
192 jsr $03,x call GetTime entry point |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
193 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
194 NoGet ldd >WGlobal+G.AlPID |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
195 ble VIRQend Quit if no Alarm set |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
196 ldd >WGlobal+G.AlPckt+3 Does Hour/Minute agree? |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
197 cmpd <D.Hour |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
198 bne VIRQend |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
199 ldd >WGlobal+G.AlPckt+1 Does Month/Day agree? |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
200 cmpd <D.Month |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
201 bne VIRQend |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
202 ldb >WGlobal+G.AlPckt+0 Does Year agree? |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
203 cmpb <D.Year |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
204 bne VIRQend |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
205 ldd >WGlobal+G.AlPID |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
206 cmpd #1 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
207 beq checkbel |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
208 os9 F$Send |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
209 bra endalarm |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
210 checkbel ldb <D.Sec Sound bell for 15 seconds |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
211 andb #$F0 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
212 beq dobell |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
213 endalarm ldd #$FFFF |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
214 std >WGlobal+G.AlPID |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
215 bra VIRQend |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
216 dobell ldx >WGlobal+G.BelVec |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
217 beq VIRQend |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
218 jsr ,x |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
219 VIRQend jmp [>D.Clock] Jump to kernel's timeslice routine |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
220 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
221 *------------------------------------------------------------ |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
222 * Interrupt polling and GIME reset code |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
223 * |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
224 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
225 * |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
226 * Call [D.Poll] until all interrupts have been handled |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
227 * |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
228 Dopoll |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
229 IFGT Level-2 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
230 lda >$0643 Level 3: get map type |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
231 ldb >$0645 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
232 pshs d save for later |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
233 ENDC |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
234 Dopoll.i |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
235 jsr [>D.Poll] Call poll routine |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
236 bcc DoPoll.i Until error (error -> no interrupt found) |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
237 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
238 IFGT Level-2 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
239 puls d |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
240 orcc #IntMasks |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
241 sta >$0643 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
242 stb >$0645 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
243 std >DAT.Regs+1 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
244 andcc #^IntMasks |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
245 ENDC |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
246 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
247 * |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
248 * Reset GIME to avoid missed IRQs |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
249 * |
3160
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
250 DoToggle clrb |
3131
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
251 rts |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
252 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
253 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
254 *------------------------------------------------------------ |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
255 * |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
256 * Handle F$VIRQ system call |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
257 * |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
258 F.VIRQ pshs cc |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
259 orcc #IntMasks Disable interrupts |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
260 ldy <D.CLTb Address of VIRQ table |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
261 ldx <D.Init Address of INIT |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
262 ldb PollCnt,x Number of polling table entries from INIT |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
263 ldx R$X,u Zero means delete entry |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
264 beq RemVIRQ |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
265 IFGT Level-2 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
266 bra FindVIRQ ---x |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
267 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
268 v.loop leay 4,y ---x |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
269 ENDC |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
270 FindVIRQ ldx ,y++ Is VIRQ entry null? |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
271 beq AddVIRQ If yes, add entry here |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
272 decb |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
273 bne FindVIRQ |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
274 puls cc |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
275 comb |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
276 ldb #E$Poll |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
277 rts |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
278 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
279 AddVIRQ |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
280 IFGT Level-2 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
281 ldx R$Y,u |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
282 stx ,y |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
283 lda >$0643 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
284 ldb >$0645 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
285 std 2,y |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
286 ELSE |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
287 leay -2,y point to first null VIRQ entry |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
288 ldx R$Y,u |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
289 stx ,y |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
290 ENDC |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
291 ldy R$D,u |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
292 sty ,x |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
293 bra virqexit |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
294 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
295 IFGT Level-2 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
296 v.chk leay 4,y |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
297 RemVIRQ ldx ,y |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
298 ELSE |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
299 RemVIRQ ldx ,y++ |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
300 ENDC |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
301 beq virqexit |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
302 cmpx R$Y,u |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
303 bne RemVIRQ |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
304 bsr DelVIRQ |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
305 virqexit puls cc |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
306 clrb |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
307 rts |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
308 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
309 DelVIRQ pshs x,y |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
310 DelVLup |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
311 IFGT Level-2 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
312 ldq ,y++ move entries up in table |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
313 leay 2,y |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
314 stq -8,y |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
315 bne DelVLup |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
316 puls x,y,pc |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
317 ELSE |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
318 ldx ,y++ move entries up in table |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
319 stx -4,y |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
320 bne DelVLup |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
321 puls x,y |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
322 leay -2,y |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
323 rts |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
324 ENDC |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
325 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
326 *------------------------------------------------------------ |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
327 * |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
328 * Handle F$Alarm call |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
329 * |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
330 F.Alarm ldx #WGlobal+G.AlPckt |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
331 ldd R$D,u |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
332 bne DoAlarm |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
333 std G.AlPID-G.AlPckt,x Erase F$Alarm PID, Signal. |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
334 rts |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
335 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
336 DoAlarm tsta If PID != 0, set alarm for this process |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
337 bne SetAlarm |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
338 cmpd #1 1 -> Set system-wide alarm |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
339 bne GetAlarm |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
340 SetAlarm std G.AlPID-G.AlPckt,x |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
341 ldy <D.Proc |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
342 lda P$Task,y Move from process task |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
343 ldb <D.SysTsk To system task |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
344 ldx R$X,u From address given in X |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
345 ldu #WGlobal+G.AlPckt |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
346 ldy #5 Move 5 bytes |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
347 bra FMove |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
348 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
349 GetAlarm cmpd #2 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
350 bne AlarmErr |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
351 ldd G.AlPID-G.AlPckt,x |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
352 std R$D,u |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
353 bra RetTime |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
354 AlarmErr comb |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
355 ldb #E$IllArg |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
356 rts |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
357 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
358 *------------------------------------------------------------ |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
359 * |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
360 * Handle F$Time System call |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
361 * |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
362 F.Time equ * |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
363 ldx #D.Time Address of system time packet |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
364 RetTime ldy <D.Proc Get pointer to current proc descriptor |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
365 ldb P$Task,y Process Task number |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
366 lda <D.SysTsk From System Task |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
367 ldu R$X,u |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
368 STime.Mv ldy #6 Move 6 bytes |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
369 FMove os9 F$Move |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
370 rts |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
371 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
372 *------------------------------------------------------------ |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
373 * |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
374 * Handle F$STime system call |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
375 * |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
376 * First, copy time packet from user address space to system time |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
377 * variables, then fall through to code to update RTC. |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
378 * |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
379 F.STime equ * |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
380 ldx <D.Proc Caller's process descriptor |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
381 lda P$Task,x Source is in user map |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
382 ldx R$X,u Address of caller's time packet |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
383 ldu #D.Time Destination address |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
384 ldb <D.SysTsk Destination is in system map |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
385 bsr STime.Mv Get time packet (ignore errors) |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
386 lda #TkPerSec Reset to start of second |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
387 sta <D.Tick |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
388 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
389 * |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
390 * Call SetTime entry point in Clock2 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
391 ldx <D.Clock2 get entry point to Clock2 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
392 jsr $06,x else call GetTime entry point |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
393 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
394 NoSet rts |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
395 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
396 Clock2 fcs "Clock2" |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
397 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
398 *-------------------------------------------------- |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
399 * |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
400 * Clock Initialization |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
401 * |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
402 * This vector is called by the kernel to service the first F$STime |
3160
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
403 * call. F$STime is usually called by SysGo (with a dummy argument) |
3131
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
404 * in order to initialize the clock. F$STime is re-vectored to the |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
405 * service code above to handle future F$STime calls. |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
406 * |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
407 * |
3160
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
408 init ldx <D.Proc save user proc |
3131
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
409 pshs x |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
410 ldx <D.SysPrc make sys for link |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
411 stx <D.Proc |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
412 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
413 leax <Clock2,pcr |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
414 lda #Sbrtn+Objct |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
415 os9 F$Link |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
416 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
417 * And here, we restore the original D.Proc value |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
418 puls x |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
419 stx <D.Proc restore user proc |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
420 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
421 bcc LinkOk |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
422 lda #E$MNF |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
423 jmp <D.Crash |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
424 LinkOk sty <D.Clock2 save entry point |
3160
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
425 |
3131
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
426 pshs cc save IRQ enable status (and Carry clear) |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
427 orcc #IntMasks stop interrupts |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
428 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
429 * Don't need to explicitly read RTC during initialization |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
430 ldd #59*256+TkPerTS last second and time slice in minute |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
431 std <D.Sec Will prompt RTC read at next time slice |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
432 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
433 stb <D.TSlice set ticks per time slice |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
434 stb <D.Slice set first time slice |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
435 leax SvcIRQ,pcr set IRQ handler |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
436 stx <D.IRQ |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
437 leax SvcVIRQ,pcr set VIRQ handler |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
438 stx <D.VIRQ |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
439 leay NewSvc,pcr insert syscalls |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
440 os9 F$SSvc |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
441 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
442 * Call Clock2 init routine |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
443 ldy <D.Clock2 get entry point to Clock2 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
444 jsr ,y call init entry point of Clock2 |
3160
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
445 |
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
446 * Initialize clock hardware |
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
447 lda #2 enable timer and its interrupt |
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
448 sta TIMER |
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
449 |
b79920779783
mc09 l2: Complete rework of the mc09 clock module (copied from coco)
Neal Crook <foofoobedoo@gmail.com>
parents:
3131
diff
changeset
|
450 puls cc,pc recover IRQ enable status and return |
3131
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
451 |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
452 emod |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
453 len equ * |
e1aadba01e81
Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff
changeset
|
454 end |