annotate level2/modules/mc09clock.asm @ 3131:e1aadba01e81

Add new Level 2 port for Multicomp09 "mc09l2" Add infrastructure (directories, makefiles etc). Target name is mc09l2 to distinguish it from the Level 1 port (target name mc09). In the code, the name mc09 is used for platform-dependent code, whether for Level 1 or Level 2.
author Neal Crook <foofoobedoo@gmail.com>
date Mon, 05 Dec 2016 17:39:03 +0000
parents
children b79920779783
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 *
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
4 * Clock module for CoCo 3 and TC9 OS9 Level 2 and NitrOS-9
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 * Includes support for several different RTC chips, GIME Toggle
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
7 * IRQ fix, numerous minor changes.
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
8 *
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
9 * 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
10 *
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
11 * $Id$
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
12 *
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
13 * Edt/Rev YYYY/MM/DD Modified by
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
14 * Comment
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
15 * ------------------------------------------------------------------
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 * NitrOS-9 2.00 distribution.
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
18 *
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
19 * 9r4 2003/01/01 Boisy G. Pitre
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
20 * Back-ported to OS-9 Level Two.
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
21 *
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
22 * 9r5 2003/08/18 Boisy G. Pitre
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
23 * Separated clock into Clock and Clock2 for modularity.
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
24
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
25 nam Clock
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
26 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
27
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
28 TkPerTS equ 2 ticks per time slice
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
29 GI.Toggl equ %00000001 GIME CART* IRQ enable bit, for CC3
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
30
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
31 * TC9 needs to reset more interrupt sources
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
32 *GI.Toggl equ %00000111 GIME SERINT*, KEYINT*, CART* IRQ enable bits
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
33
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
34 IFP1
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
35 use defsfile
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
36 use cocovtio.d
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
37 ENDC
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 Edtn equ 9
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
40 Vrsn equ 5
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
41
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 *
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
44 * Start of module
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 mod len,name,Systm+Objct,ReEnt+Vrsn,Init,0
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
47
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
48 name fcs "Clock"
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
49 fcb Edtn
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
50
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
51 *
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
52 * Table to set up Service Calls:
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
53 *
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
54 NewSvc fcb F$Time
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
55 fdb F.Time-*-2
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
56 fcb F$VIRQ
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
57 fdb F.VIRQ-*-2
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
58 fcb F$Alarm
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
59 fdb F.ALARM-*-2
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
60 fcb F$STime
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
61 fdb F.STime-*-2
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
62 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
63
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
64 *---------------------------------------------------------
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
65 * IRQ Handling starts here.
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
66 *
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
67 * 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
68 * 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
69 *
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
70 SvcIRQ lda >IRQEnR Get GIME IRQ Status and save it.
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
71 ora <D.IRQS
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
72 sta <D.IRQS
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
73 bita #$08 Check for clock interrupt
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
74 beq NoClock
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
75 anda #^$08 Drop clock interrupt
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
76 sta <D.IRQS
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
77 ldx <D.VIRQ Set VIRQ routine to be executed
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
78 clr <D.QIRQ ---x IS clock IRQ
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
79 bra ContIRQ
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
80
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
81 NoClock leax DoPoll,pcr If not clock IRQ, just poll IRQ source
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
82 IFNE H6309
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
83 oim #$FF,<D.QIRQ ---x set flag to NOT clock IRQ
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
84 ELSE
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
85 lda #$FF
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
86 sta <D.QIRQ
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
87 ENDC
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
88 ContIRQ stx <D.SvcIRQ
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
89 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
90
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 *
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
93 * IRQ handling re-enters here on VSYNC IRQ.
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
94 *
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
95 * - 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
96 * - 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
97 * - Call Keyboard scan
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
98 * - Update time variables
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
99 * - At end of minute, check alarm
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
100 *
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
101 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
102 pshs a
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
103 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
104 bra virqent
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
105
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
106 virqloop equ *
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
107 IFGT Level-2
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
108 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
109 orcc #IntMasks
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
110 sta >$0643
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
111 stb >$0645
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
112 std >DAT.Regs+1
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
113 andcc #^IntMasks
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
114 ENDC
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
115
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
116 ldd Vi.Cnt,x Decrement tick count
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
117 IFNE H6309
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
118 decd --- subd #1
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
119 ELSE
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
120 subd #$0001
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
121 ENDC
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
122 bne notzero Is this one done?
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
123 lda Vi.Stat,x Should we reset?
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
124 bmi doreset
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
125 lbsr DelVIRQ No, delete this entry
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
126 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
127 sta Vi.Stat,x
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
128 lda #$80 Add VIRQ as interrupt source
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
129 sta ,s
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
130 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
131 notzero std Vi.Cnt,x
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
132 virqent ldx ,y++
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
133 bne virqloop
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 IFGT Level-2
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
136 puls d
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
137 orcc #Carry
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
138 stb >$0643
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
139 stb >DAT.Regs+1
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
140 incb
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
141 stb >$0645
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
142 stb >DAT.Regs+1
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
143 andcc #^IntMasks
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
144 ELSE
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
145 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
146 ENDC
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
147
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
148 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
149 bita #%10110111 Any V/IRQ interrupts pending?
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
150 beq toggle
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
151 IFGT Level-2
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
152 lbsr DoPoll Yes, go service them.
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
153 ELSE
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
154 bsr DoPoll Yes, go service them.
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
155 ENDC
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
156 bra KbdCheck
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
157 toggle equ *
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
158 IFGT Level-2
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
159 lbsr DoToggle No, toggle GIME anyway
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
160 ELSE
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
161 bsr DoToggle No, toggle GIME anyway
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
162 ENDC
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
163
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
164 KbdCheck equ *
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
165 IFGT Level-2
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
166 lda >$0643 grab current map type
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
167 ldb >$0645
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
168 pshs d save it
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
169 orcc #IntMasks IRQs off
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
170 lda >$0660 SCF local memory ---x
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
171 sta >$0643 into DAT image ---x
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
172 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
173 inca
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
174 sta >$0645
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
175 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
176 ENDC
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
177
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
178 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
179
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
180 IFGT Level-2
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
181 puls d restore original map type ---x
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
182 orcc #IntMasks
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
183 sta >$0643 into system DAT image ---x
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
184 stb >$0645
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
185 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
186 andcc #$AF
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
187 ENDC
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 dec <D.Tick End of second?
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
190 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
191 lda #TkPerSec Reset tick count
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
192 sta <D.Tick
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 * 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
195 inc <D.Sec go up one second
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
196 lda <D.Sec grab current second
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
197 cmpa #60 End of minute?
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
198 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
199 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
200
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
201 *
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
202 * Call GetTime entry point in Clock2
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
203 *
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
204 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
205 jsr $03,x call GetTime entry point
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
206
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
207 NoGet ldd >WGlobal+G.AlPID
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
208 ble VIRQend Quit if no Alarm set
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
209 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
210 cmpd <D.Hour
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
211 bne VIRQend
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
212 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
213 cmpd <D.Month
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
214 bne VIRQend
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
215 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
216 cmpb <D.Year
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
217 bne VIRQend
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
218 ldd >WGlobal+G.AlPID
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
219 cmpd #1
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
220 beq checkbel
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
221 os9 F$Send
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
222 bra endalarm
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
223 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
224 andb #$F0
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
225 beq dobell
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
226 endalarm ldd #$FFFF
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
227 std >WGlobal+G.AlPID
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
228 bra VIRQend
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
229 dobell ldx >WGlobal+G.BelVec
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
230 beq VIRQend
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
231 jsr ,x
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
232 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
233
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
234 *------------------------------------------------------------
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
235 * Interrupt polling and GIME reset code
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
236 *
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 *
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
239 * 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
240 *
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
241 Dopoll
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
242 IFGT Level-2
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
243 lda >$0643 Level 3: get map type
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
244 ldb >$0645
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
245 pshs d save for later
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
246 ENDC
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
247 Dopoll.i
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
248 jsr [>D.Poll] Call poll routine
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
249 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
250
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
251 IFGT Level-2
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
252 puls d
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
253 orcc #IntMasks
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
254 sta >$0643
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
255 stb >$0645
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
256 std >DAT.Regs+1
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
257 andcc #^IntMasks
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
258 ENDC
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
259
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
260 *
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
261 * Reset GIME to avoid missed IRQs
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
262 *
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
263 DoToggle lda #^GI.Toggl Mask off CART* bit
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
264 anda <D.IRQS
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
265 sta <D.IRQS
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
266 lda <D.IRQER Get current enable register status
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
267 tfr a,b
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
268 anda #^GI.Toggl Mask off CART* bit
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
269 orb #GI.Toggl --- ensure that 60Hz IRQ's are always enabled
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
270 sta >IRQEnR Disable CART
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
271 stb >IRQEnR Enable CART
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
272 clrb
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
273 rts
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
274
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
275
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
276 *------------------------------------------------------------
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
277 *
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
278 * Handle F$VIRQ system call
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
279 *
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
280 F.VIRQ pshs cc
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
281 orcc #IntMasks Disable interrupts
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
282 ldy <D.CLTb Address of VIRQ table
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
283 ldx <D.Init Address of INIT
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
284 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
285 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
286 beq RemVIRQ
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
287 IFGT Level-2
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
288 bra FindVIRQ ---x
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
289
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
290 v.loop leay 4,y ---x
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
291 ENDC
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
292 FindVIRQ ldx ,y++ Is VIRQ entry null?
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
293 beq AddVIRQ If yes, add entry here
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
294 decb
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
295 bne FindVIRQ
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
296 puls cc
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
297 comb
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
298 ldb #E$Poll
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
299 rts
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
300
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
301 AddVIRQ
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
302 IFGT Level-2
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
303 ldx R$Y,u
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
304 stx ,y
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
305 lda >$0643
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
306 ldb >$0645
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
307 std 2,y
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
308 ELSE
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
309 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
310 ldx R$Y,u
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
311 stx ,y
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
312 ENDC
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
313 ldy R$D,u
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
314 sty ,x
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
315 bra virqexit
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
316
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
317 IFGT Level-2
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
318 v.chk leay 4,y
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
319 RemVIRQ ldx ,y
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
320 ELSE
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
321 RemVIRQ ldx ,y++
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
322 ENDC
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
323 beq virqexit
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
324 cmpx R$Y,u
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
325 bne RemVIRQ
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
326 bsr DelVIRQ
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
327 virqexit puls cc
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
328 clrb
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
329 rts
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
330
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
331 DelVIRQ pshs x,y
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
332 DelVLup
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
333 IFGT Level-2
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
334 ldq ,y++ move entries up in table
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
335 leay 2,y
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
336 stq -8,y
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
337 bne DelVLup
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
338 puls x,y,pc
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
339 ELSE
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
340 ldx ,y++ move entries up in table
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
341 stx -4,y
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
342 bne DelVLup
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
343 puls x,y
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
344 leay -2,y
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
345 rts
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
346 ENDC
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
347
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 *
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
350 * Handle F$Alarm call
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
351 *
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
352 F.Alarm ldx #WGlobal+G.AlPckt
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
353 ldd R$D,u
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
354 bne DoAlarm
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
355 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
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 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
359 bne SetAlarm
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
360 cmpd #1 1 -> Set system-wide alarm
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
361 bne GetAlarm
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
362 SetAlarm std G.AlPID-G.AlPckt,x
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
363 ldy <D.Proc
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
364 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
365 ldb <D.SysTsk To system task
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
366 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
367 ldu #WGlobal+G.AlPckt
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
368 ldy #5 Move 5 bytes
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
369 bra FMove
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
370
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
371 GetAlarm cmpd #2
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
372 bne AlarmErr
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
373 ldd G.AlPID-G.AlPckt,x
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
374 std R$D,u
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
375 bra RetTime
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
376 AlarmErr comb
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
377 ldb #E$IllArg
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
378 rts
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
379
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
380 *------------------------------------------------------------
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
381 *
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
382 * Handle F$Time System call
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
383 *
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
384 F.Time equ *
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
385 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
386 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
387 ldb P$Task,y Process Task number
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
388 lda <D.SysTsk From System Task
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
389 ldu R$X,u
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
390 STime.Mv ldy #6 Move 6 bytes
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
391 FMove os9 F$Move
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
392 rts
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 *------------------------------------------------------------
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 * Handle F$STime system call
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 * 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
399 * 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
400 *
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
401 F.STime equ *
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
402 ldx <D.Proc Caller's process descriptor
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
403 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
404 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
405 ldu #D.Time Destination address
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
406 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
407 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
408 lda #TkPerSec Reset to start of second
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
409 sta <D.Tick
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
410
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
411 *
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
412 * Call SetTime entry point in Clock2
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
413 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
414 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
415
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
416 NoSet rts
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
417
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
418 Clock2 fcs "Clock2"
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
419
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 *
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
422 * Clock Initialization
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
423 *
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
424 * This vector is called by the kernel to service the first F$STime
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
425 * call. F$STime is usually called by CC3Go (with a dummy argument)
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
426 * 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
427 * 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
428 *
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
429 *
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
430 Init ldx <D.Proc save user proc
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
431 pshs x
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
432 ldx <D.SysPrc make sys for link
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
433 stx <D.Proc
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
434
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
435 leax <Clock2,pcr
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
436 lda #Sbrtn+Objct
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
437 os9 F$Link
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
438
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
439 * 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
440 puls x
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
441 stx <D.Proc restore user proc
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
442
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
443 bcc LinkOk
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
444 lda #E$MNF
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
445 jmp <D.Crash
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
446 LinkOk sty <D.Clock2 save entry point
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
447 InitCont ldx #PIA0Base point to PIA0
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
448 clra no error for return...
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
449 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
450 orcc #IntMasks stop interrupts
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 * Note: this code can go away once we have a rel_50hz
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
453 IFEQ TkPerSec-50
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
454 ldb <D.VIDMD get video mode register copy
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
455 orb #$08 set 50 Hz VSYNC bit
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
456 stb <D.VIDMD save video mode register copy
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
457 stb >$FF98 set 50 Hz VSYNC
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
458 ENDC
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
459
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
460 sta 1,x enable DDRA
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
461 sta ,x set port A all inputs
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
462 sta 3,x enable DDRB
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
463 coma
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
464 sta 2,x set port B all outputs
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
465 ldd #$343C [A]=PIA0 CRA contents, [B]=PIA0 CRB contents
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
466 sta 1,x CA2 (MUX0) out low, port A, disable HBORD high-to-low IRQs
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
467 stb 3,x CB2 (MUX1) out low, port B, disable VBORD low-to-high IRQs
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
468 sta $23,x disable CART +RG Mar 14, 2012
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
469 lda ,x clear possible pending PIA0 HBORD IRQ
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
470 lda 2,x clear possible pending PIA0 VBORD IRQ
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
471
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
472 * 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
473 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
474 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
475
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
476 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
477 stb <D.Slice set first time slice
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
478 leax SvcIRQ,pcr set IRQ handler
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
479 stx <D.IRQ
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
480 leax SvcVIRQ,pcr set VIRQ handler
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
481 stx <D.VIRQ
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
482 leay NewSvc,pcr insert syscalls
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
483 os9 F$SSvc
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
484 * H6309 optimization opportunity here using oim
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
485 lda <D.IRQER get shadow GIME IRQ enable register
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
486 ora #$08 set VBORD bit
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
487 sta <D.IRQER save shadow register
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
488 sta >IRQEnR enable GIME VBORD IRQs
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
489
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
490 * Call Clock2 init routine
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
491 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
492 jsr ,y call init entry point of Clock2
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
493 InitRts puls cc,pc recover IRQ enable status and return
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
494
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
495 emod
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
496 len equ *
e1aadba01e81 Add new Level 2 port for Multicomp09 "mc09l2"
Neal Crook <foofoobedoo@gmail.com>
parents:
diff changeset
497 end