Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.sys.apple2.programmer > #1160
| From | D Finnigan <dog_cow@macgui.com> |
|---|---|
| Newsgroups | comp.sys.apple2.programmer |
| Subject | Source Code for Multitasking Mouse Draw Demo |
| Date | 2014-02-21 19:51 +0000 |
| Organization | bbs-scene usenet news |
| Message-ID | <dog_cow-multitasking-source-20feb14@macgui.com> (permalink) |
| References | <dog_cow-1393012033@macgui.com> |
For the benefit of all Apple II users, the source code is hereby surrendered into the public domain. I claim no copyright on the source code.
Assembler used is Merlin.
1 SPKR EQU $C030
2 PRBYTE EQU $FDDA
3 DOSWARM EQU $3D0
4 IRQLOC EQU $3FE
5 COUT EQU $FDF0
6 VBLINT EQU $09
7 MOUIDLOC1 EQU $05
8 MOUIDLOC2 EQU $07
9 MOUIDLOC3 EQU $0B
10 MOUIDLOC4 EQU $0C
11 MOUIDLOC5 EQU $FB
12 MOUID1 EQU $38
13 MOUID2 EQU $18
14 MOUID3 EQU $01
15 MOUID4 EQU $20
16 MOUID5 EQU $D6
17 BASEADDR EQU $06 ; 2-BYTES FOR INDEXED ADDRESSING
18 MSLOT EQU $08
19 CTR EQU $09 ; IRQ COUNTER
20 ACT EQU $19 ; ACTIVE PROCESS
21 MAXP EQU $03
22 *
8000: A9 00 23 FINDMOUSE LDA #$00
8002: 85 06 24 STA BASEADDR
8004: A9 C8 25 LDA #$C8
8006: 85 07 26 STA BASEADDR+1
8008: A2 08 27 LDX #$08
800A: CA 28 :LOOP1 DEX
800B: F0 3D 29 BEQ :NOMOUSE
800D: C6 07 30 DEC BASEADDR+1
800F: A0 05 31 LDY #MOUIDLOC1
8011: B1 06 32 LDA (BASEADDR),Y
8013: C9 38 33 CMP #MOUID1
8015: D0 F3 34 BNE :LOOP1
8017: A0 07 35 LDY #MOUIDLOC2
8019: B1 06 36 LDA (BASEADDR),Y
801B: C9 18 37 CMP #MOUID2
801D: D0 EB 38 BNE :LOOP1
801F: A0 0B 39 LDY #MOUIDLOC3
8021: B1 06 40 LDA (BASEADDR),Y
8023: C9 01 41 CMP #MOUID3
8025: D0 E3 42 BNE :LOOP1
8027: A0 0C 43 LDY #MOUIDLOC4
8029: B1 06 44 LDA (BASEADDR),Y
802B: C9 20 45 CMP #MOUID4
802D: D0 DB 46 BNE :LOOP1
802F: A0 FB 47 LDY #MOUIDLOC5
8031: B1 06 48 LDA (BASEADDR),Y
8033: C9 D6 49 CMP #MOUID5
8035: D0 D3 50 BNE :LOOP1
8037: 8A 51 TXA
8038: 0A 52 ASL
8039: 0A 53 ASL
803A: 0A 54 ASL
803B: 0A 55 ASL
803C: 85 08 56 STA MSLOT
803E: 8A 57 TXA
803F: 20 DA FD 58 JSR PRBYTE
8042: A9 8D 59 LDA #$8D
===== Page 2 =====
8044: 20 F0 FD 60 JSR COUT
8047: 4C 7A 80 61 JMP CREATEALL
804A: A9 CE 62 :NOMOUSE LDA #$CE
804C: 20 F0 FD 63 JSR COUT
804F: A9 CF 64 LDA #$CF
8051: 20 F0 FD 65 JSR COUT
8054: A9 A0 66 LDA #$A0
8056: 20 F0 FD 67 JSR COUT
8059: A9 CD 68 LDA #$CD
805B: 20 F0 FD 69 JSR COUT
805E: A9 CF 70 LDA #$CF
8060: 20 F0 FD 71 JSR COUT
8063: A9 D5 72 LDA #$D5
8065: 20 F0 FD 73 JSR COUT
8068: A9 D3 74 LDA #$D3
806A: 20 F0 FD 75 JSR COUT
806D: A9 C5 76 LDA #$C5
806F: 20 F0 FD 77 JSR COUT
8072: A9 8D 78 LDA #$8D
8074: 20 F0 FD 79 JSR COUT
8077: 4C D0 03 80 JMP DOSWARM
81 *
807A: 58 82 CREATEALL CLI
807B: 08 83 PHP
807C: 78 84 SEI
807D: A9 00 85 LDA #$00
807F: 8D 74 81 86 STA STKTAB
8082: A8 87 TAY
8083: A9 E0 88 LDA #$E0 ; INITIAL SP
8085: 99 75 81 89 STA STKTAB+1,Y
8088: A9 C2 90 LDA #$C2
808A: C8 91 INY
808B: 99 75 81 92 STA STKTAB+1,Y
808E: A9 A4 93 LDA #$A4
8090: C8 94 INY
8091: 99 75 81 95 STA STKTAB+1,Y
8094: A0 00 96 LDY #$00
8096: A9 78 97 LDA #<PROC1
8098: A2 81 98 LDX #>PROC1
809A: 20 BE 80 99 JSR NEWPROC
809D: A0 01 100 LDY #$01
809F: A9 8B 101 LDA #<PROC2
80A1: A2 81 102 LDX #>PROC2
80A3: 20 BE 80 103 JSR NEWPROC
80A6: A0 02 104 LDY #$02
80A8: A9 9D 105 LDA #<PROC3
80AA: A2 81 106 LDX #>PROC3
80AC: 20 BE 80 107 JSR NEWPROC
80AF: 20 EC 80 108 JSR VBLON
80B2: A9 FF 109 LDA #$FF
80B4: 85 19 110 STA ACT
80B6: A9 13 111 LDA #$13
80B8: 85 09 112 STA CTR
80BA: 28 113 PLP ; ENABLE IRQ
80BB: 4C BB 80 114 :IDLE JMP :IDLE
115 *
80BE: C0 03 116 NEWPROC CPY #MAXP
===== Page 3 =====
80C0: F0 29 117 BEQ :DONE
80C2: EE 74 81 118 INC STKTAB
80C5: 48 119 PHA
80C6: 8A 120 TXA
80C7: 48 121 PHA
80C8: BE 75 81 122 LDX STKTAB+1,Y
80CB: 68 123 PLA ; HI-BYTE OF START ADDR
80CC: 9D 00 01 124 STA $0100,X
80CF: CA 125 DEX
80D0: 68 126 PLA
80D1: 9D 00 01 127 STA $0100,X
80D4: A9 00 128 LDA #$00 ; INITIAL PROCESSOR STATUS
80D6: CA 129 DEX
80D7: 9D 00 01 130 STA $0100,X
80DA: CA 131 DEX
80DB: 9D 00 01 132 STA $0100,X ; INITIAL REGISTERS
80DE: CA 133 DEX
80DF: 9D 00 01 134 STA $0100,X
80E2: CA 135 DEX
80E3: 9D 00 01 136 STA $0100,X
80E6: CA 137 DEX
80E7: 8A 138 TXA
80E8: 99 75 81 139 STA STKTAB+1,Y
80EB: 60 140 :DONE RTS
141 *
80EC: A9 01 142 VBLON LDA #$01
80EE: 20 10 81 143 JSR SETMOUSE
80F1: 20 04 81 144 JSR INITMOUSE
80F4: A9 3B 145 LDA #<IRQ
80F6: 8D FE 03 146 STA IRQLOC
80F9: A9 81 147 LDA #>IRQ
80FB: 8D FF 03 148 STA IRQLOC+1
80FE: A9 09 149 LDA #VBLINT
8100: 20 10 81 150 JSR SETMOUSE ; TURN ON MOUSE VBL INTERRUPTS
8103: 60 151 RTS
152 *
8104: A0 19 153 INITMOUSE LDY #$19
8106: A9 00 154 LDA #$00
8108: 85 06 155 STA BASEADDR
810A: B1 06 156 LDA (BASEADDR),Y
810C: 85 06 157 STA BASEADDR
810E: D0 24 158 BNE MOUSEJMP
159 *
8110: A0 12 160 SETMOUSE LDY #$12
8112: AA 161 TAX
8113: A9 00 162 LDA #$00
8115: 85 06 163 STA BASEADDR
8117: B1 06 164 LDA (BASEADDR),Y
8119: 85 06 165 STA BASEADDR
811B: 8A 166 TXA
811C: 10 16 167 BPL MOUSEJMP
168 *
811E: A0 13 169 SERVEMOUSE LDY #$13
8120: A9 00 170 LDA #$00
8122: 85 06 171 STA BASEADDR
8124: B1 06 172 LDA (BASEADDR),Y
8126: 85 06 173 STA BASEADDR
===== Page 4 =====
8128: D0 0A 174 BNE MOUSEJMP
175 *
812A: A0 14 176 READMOUSE LDY #$14
812C: A9 00 177 LDA #$00
812E: 85 06 178 STA BASEADDR
8130: B1 06 179 LDA (BASEADDR),Y
8132: 85 06 180 STA BASEADDR
181 *
8134: A6 07 182 MOUSEJMP LDX BASEADDR+1
8136: A4 08 183 LDY MSLOT
8138: 6C 06 00 184 JMP (BASEADDR)
185 *
813B: 48 186 IRQ PHA
813C: 8A 187 TXA
813D: 48 188 PHA
813E: 98 189 TYA
813F: 48 190 PHA
8140: 20 1E 81 191 JSR SERVEMOUSE
8143: B0 29 192 BCS :DONE
8145: A6 09 193 LDX CTR
8147: E8 194 INX
8148: E0 14 195 CPX #$14
814A: 86 09 196 STX CTR
814C: D0 20 197 BNE :DONE
814E: A9 00 198 LDA #$00
8150: 85 09 199 STA CTR
8152: A4 19 200 LDY ACT
8154: 30 05 201 BMI :NEXT ; BOOTSTRAP INITIAL PROCESS
8156: BA 202 TSX
8157: 8A 203 TXA
8158: 99 75 81 204 STA STKTAB+1,Y
815B: C8 205 :NEXT INY
815C: C0 03 206 CPY #MAXP
815E: D0 02 207 BNE :CTXSW
8160: A0 00 208 LDY #$00 ; LOOP BACK TO PROCESS 0
8162: BE 75 81 209 :CTXSW LDX STKTAB+1,Y
8165: 9A 210 TXS
8166: 84 19 211 STY ACT
8168: AD 30 C0 212 LDA SPKR
816B: AD 30 C0 213 LDA SPKR
816E: 68 214 :DONE PLA
816F: A8 215 TAY
8170: 68 216 PLA
8171: AA 217 TAX
8172: 68 218 PLA
8173: 40 219 RTI
220 *
8174: 00 00 00 221 STKTAB DS MAXP+1
8177: 00
222 *
8178: A2 01 223 PROC1 LDX #$01
817A: E0 01 224 :LOOP CPX #$01
817C: D0 0A 225 BNE :QUIT
817E: A9 AE 226 LDA #$AE
8180: 08 227 PHP
8181: 78 228 SEI
8182: 20 F0 FD 229 JSR COUT
===== Page 5 =====
8185: 28 230 PLP
8186: D0 F2 231 BNE :LOOP
8188: 4C 88 81 232 :QUIT JMP :QUIT
233 *
818B: A0 00 234 PROC2 LDY #$00
818D: C8 235 :LOOP INY
818E: C0 55 236 CPY #$55
8190: D0 FB 237 BNE :LOOP
8192: A9 C0 238 LDA #$C0
8194: 08 239 PHP
8195: 78 240 SEI
8196: 20 F0 FD 241 JSR COUT
8199: 28 242 PLP
819A: 4C 8B 81 243 JMP PROC2
244 *
819D: 4C A2 81 245 PROC3 JMP :START
81A0: 00 00 246 ]SUM DW $0000
81A2: 18 247 :START CLC
81A3: AD A0 81 248 LDA ]SUM
81A6: 69 01 249 ADC #$01
81A8: 8D A0 81 250 STA ]SUM
81AB: 90 08 251 BCC :NEXT
81AD: AD A1 81 252 LDA ]SUM+1
81B0: 69 00 253 ADC #$00
81B2: 8D A1 81 254 STA ]SUM+1
81B5: 4C A2 81 255 :NEXT JMP :START
--End assembly, 440 bytes, Errors: 0
Symbol table - alphabetical order:
ACT =$19 BASEADDR=$06 COUT =$FDF0 CREATEALL=$807A
CTR =$09 DOSWARM =$03D0 ? FINDMOUSE=$8000 INITMOUSE=$8104
IRQ =$813B IRQLOC =$03FE MAXP =$03 MOUID1 =$38
MOUID2 =$18 MOUID3 =$01 MOUID4 =$20 MOUID5 =$D6
MOUIDLOC1=$05 MOUIDLOC2=$07 MOUIDLOC3=$0B MOUIDLOC4=$0C
MOUIDLOC5=$FB MOUSEJMP=$8134 MSLOT =$08 NEWPROC =$80BE
PRBYTE =$FDDA PROC1 =$8178 PROC2 =$818B PROC3 =$819D
? READMOUSE=$812A SERVEMOUSE=$811E SETMOUSE=$8110 SPKR =$C030
STKTAB =$8174 VBLINT =$09 VBLON =$80EC V ]SUM =$81A0
Symbol table - numerical order:
MOUID3 =$01 MAXP =$03 MOUIDLOC1=$05 BASEADDR=$06
MOUIDLOC2=$07 MSLOT =$08 VBLINT =$09 CTR =$09
MOUIDLOC3=$0B MOUIDLOC4=$0C MOUID2 =$18 ACT =$19
MOUID4 =$20 MOUID1 =$38 MOUID5 =$D6 MOUIDLOC5=$FB
DOSWARM =$03D0 IRQLOC =$03FE ? FINDMOUSE=$8000 CREATEALL=$807A
NEWPROC =$80BE VBLON =$80EC INITMOUSE=$8104 SETMOUSE=$8110
SERVEMOUSE=$811E ? READMOUSE=$812A MOUSEJMP=$8134 IRQ =$813B
STKTAB =$8174 PROC1 =$8178 PROC2 =$818B PROC3 =$819D
V ]SUM =$81A0 SPKR =$C030 PRBYTE =$FDDA COUT =$FDF0
Back to comp.sys.apple2.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Multitasking Mouse Draw Demo D Finnigan <dog_cow@macgui.com> - 2014-02-21 19:47 +0000
Documentation for Multitasking Mouse Draw Demo D Finnigan <dog_cow@macgui.com> - 2014-02-21 19:48 +0000
Source Code for Multitasking Mouse Draw Demo D Finnigan <dog_cow@macgui.com> - 2014-02-21 19:51 +0000
Source Code for Multitasking Mouse Draw Demo 2 D Finnigan <dog_cow@macgui.com> - 2014-02-21 19:55 +0000
Re: Multitasking Mouse Draw Demo D Finnigan <dog_cow@macgui.com> - 2014-02-21 19:56 +0000
Re: Multitasking Mouse Draw Demo Egan Ford <datajerk@gmail.com> - 2014-02-22 09:47 -0700
Re: Multitasking Mouse Draw Demo D Finnigan <dog_cow@macgui.com> - 2014-02-22 17:36 +0000
csiph-web