Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.sys.apple2.programmer > #1161
| From | D Finnigan <dog_cow@macgui.com> |
|---|---|
| Newsgroups | comp.sys.apple2.programmer |
| Subject | Source Code for Multitasking Mouse Draw Demo 2 |
| Date | 2014-02-21 19:55 +0000 |
| Organization | bbs-scene usenet news |
| Message-ID | <dog_cow-multitasking-source2-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 KBD EQU $C000
2 KBDSTRB EQU $C010
3 SPKR EQU $C030
4 PRBYTE EQU $FDDA
5 PRNTAX EQU $F941
6 DOSWARM EQU $3D0
7 IRQLOC EQU $3FE
8 COUT EQU $FDED
9 VBLINT EQU $09
10 MOUIDLOC1 EQU $05
11 MOUIDLOC2 EQU $07
12 MOUIDLOC3 EQU $0B
13 MOUIDLOC4 EQU $0C
14 MOUIDLOC5 EQU $FB
15 MOUID1 EQU $38
16 MOUID2 EQU $18
17 MOUID3 EQU $01
18 MOUID4 EQU $20
19 MOUID5 EQU $D6
20 BASEADDR EQU $06 ; 2-BYTES FOR INDEXED ADDRESSING
21 MSLOT EQU $08
22 CTR EQU $09 ; IRQ COUNTER
23 ACT EQU $19 ; ACTIVE PROCESS
24 MAXP EQU $03
25 MOUXPOS EQU $1A ; 2 BYTES FOR MOUSE X-POSITION
26 MOUYPOS EQU $1C
27 MOUSTAT EQU $1E
28 CLRTOP EQU $F836
29 SETCOL EQU $F864
30 PLOT EQU $F800
31 SCRN EQU $F871
32 GR EQU $C050
33 MIX EQU $C053
34 RED EQU $01
35 BLUE EQU $02
36 BLACK EQU $00
37 WHITE EQU $0F
38 *
8000: A9 9B 39 LDA #$9B
8002: 20 ED FD 40 JSR COUT
8005: A9 91 41 LDA #$91 ; KILL 80-COLS FIRMWARE
8007: 20 ED FD 42 JSR COUT
800A: A9 14 43 LDA #$14
800C: 85 22 44 STA $22 ; TOP OF TEXT WINDOW
800E: 85 25 45 STA $25
46 *
8010: A9 00 47 FINDMOUSE LDA #$00
8012: 85 06 48 STA BASEADDR
8014: A9 C8 49 LDA #$C8
8016: 85 07 50 STA BASEADDR+1
8018: A2 08 51 LDX #$08
801A: CA 52 :LOOP1 DEX
801B: F0 42 53 BEQ :NOMOUSE
801D: C6 07 54 DEC BASEADDR+1
801F: A0 05 55 LDY #MOUIDLOC1
8021: B1 06 56 LDA (BASEADDR),Y
8023: C9 38 57 CMP #MOUID1
8025: D0 F3 58 BNE :LOOP1
8027: A0 07 59 LDY #MOUIDLOC2
===== Page 2 =====
8029: B1 06 60 LDA (BASEADDR),Y
802B: C9 18 61 CMP #MOUID2
802D: D0 EB 62 BNE :LOOP1
802F: A0 0B 63 LDY #MOUIDLOC3
8031: B1 06 64 LDA (BASEADDR),Y
8033: C9 01 65 CMP #MOUID3
8035: D0 E3 66 BNE :LOOP1
8037: A0 0C 67 LDY #MOUIDLOC4
8039: B1 06 68 LDA (BASEADDR),Y
803B: C9 20 69 CMP #MOUID4
803D: D0 DB 70 BNE :LOOP1
803F: A0 FB 71 LDY #MOUIDLOC5
8041: B1 06 72 LDA (BASEADDR),Y
8043: C9 D6 73 CMP #MOUID5
8045: D0 D3 74 BNE :LOOP1
8047: 8A 75 TXA
8048: 0A 76 ASL
8049: 0A 77 ASL
804A: 0A 78 ASL
804B: 0A 79 ASL
804C: 85 08 80 STA MSLOT
804E: A9 8D 81 LDA #$8D
8050: 20 ED FD 82 JSR COUT
8053: 8A 83 TXA
8054: 20 DA FD 84 JSR PRBYTE
8057: A9 8D 85 LDA #$8D
8059: 20 ED FD 86 JSR COUT
805C: 4C 7C 80 87 JMP CREATEALL
805F: A0 00 88 :NOMOUSE LDY #$00
8061: B9 71 80 89 :LOOP LDA NOMOUMSG,Y
8064: F0 08 90 BEQ :DONE
8066: 09 80 91 ORA #$80
8068: 20 ED FD 92 JSR COUT
806B: C8 93 INY
806C: D0 F3 94 BNE :LOOP
806E: 4C D0 03 95 :DONE JMP DOSWARM
8071: 8D CE CF 96 NOMOUMSG HEX 8DCECFA0CDCFD5D3C58D00
8074: A0 CD CF D5 D3 C5 8D 00
97 *
807C: 58 98 CREATEALL CLI
807D: 08 99 PHP
807E: 78 100 SEI
807F: A9 00 101 LDA #$00
8081: 8D CB 81 102 STA STKTAB
8084: A8 103 TAY
8085: A9 D0 104 LDA #$D0 ; INITIAL SP
8087: 99 CC 81 105 STA STKTAB+1,Y
808A: A9 B2 106 LDA #$B2
808C: C8 107 INY
808D: 99 CC 81 108 STA STKTAB+1,Y
8090: A9 94 109 LDA #$94
8092: C8 110 INY
8093: 99 CC 81 111 STA STKTAB+1,Y
8096: A0 00 112 LDY #$00
8098: A9 14 113 LDA #<PROC0
809A: A2 82 114 LDX #>PROC0
809C: 20 C0 80 115 JSR NEWPROC
===== Page 3 =====
809F: A0 01 116 LDY #$01
80A1: A9 EE 117 LDA #<PROC1
80A3: A2 81 118 LDX #>PROC1
80A5: 20 C0 80 119 JSR NEWPROC
80A8: A0 02 120 LDY #$02
80AA: A9 CF 121 LDA #<PROC2
80AC: A2 81 122 LDX #>PROC2
80AE: 20 C0 80 123 JSR NEWPROC
80B1: 20 EE 80 124 JSR VBLON
80B4: A9 FF 125 LDA #$FF
80B6: 85 19 126 STA ACT
80B8: A9 13 127 LDA #$13
80BA: 85 09 128 STA CTR
80BC: 28 129 PLP ; ENABLE IRQ
80BD: 4C BD 80 130 :IDLE JMP :IDLE
131 *
80C0: C0 03 132 NEWPROC CPY #MAXP
80C2: F0 29 133 BEQ :DONE
80C4: EE CB 81 134 INC STKTAB
80C7: 48 135 PHA
80C8: 8A 136 TXA
80C9: 48 137 PHA
80CA: BE CC 81 138 LDX STKTAB+1,Y
80CD: 68 139 PLA ; HI-BYTE OF START ADDR
80CE: 9D 00 01 140 STA $0100,X
80D1: CA 141 DEX
80D2: 68 142 PLA
80D3: 9D 00 01 143 STA $0100,X
80D6: A9 00 144 LDA #$00 ; INITIAL PROCESSOR STATUS
80D8: CA 145 DEX
80D9: 9D 00 01 146 STA $0100,X
80DC: CA 147 DEX
80DD: 9D 00 01 148 STA $0100,X ; INITIAL REGISTERS
80E0: CA 149 DEX
80E1: 9D 00 01 150 STA $0100,X
80E4: CA 151 DEX
80E5: 9D 00 01 152 STA $0100,X
80E8: CA 153 DEX
80E9: 8A 154 TXA
80EA: 99 CC 81 155 STA STKTAB+1,Y
80ED: 60 156 :DONE RTS
157 *
80EE: A9 01 158 VBLON LDA #$01
80F0: 20 12 81 159 JSR SETMOUSE
80F3: 20 06 81 160 JSR INITMOUSE
80F6: A9 6F 161 LDA #<IRQ
80F8: 8D FE 03 162 STA IRQLOC
80FB: A9 81 163 LDA #>IRQ
80FD: 8D FF 03 164 STA IRQLOC+1
8100: A9 09 165 LDA #VBLINT
8102: 20 12 81 166 JSR SETMOUSE ; TURN ON MOUSE VBL INTERRUPTS
8105: 60 167 RTS
168 *
8106: A0 19 169 INITMOUSE LDY #$19
8108: A9 00 170 LDA #$00
810A: 85 06 171 STA BASEADDR
810C: B1 06 172 LDA (BASEADDR),Y
===== Page 4 =====
810E: 85 06 173 STA BASEADDR
8110: D0 3E 174 BNE MOUSEJMP
175 *
8112: A0 12 176 SETMOUSE LDY #$12
8114: AA 177 TAX
8115: A9 00 178 LDA #$00
8117: 85 06 179 STA BASEADDR
8119: B1 06 180 LDA (BASEADDR),Y
811B: 85 06 181 STA BASEADDR
811D: 8A 182 TXA
811E: 10 30 183 BPL MOUSEJMP
184 *
8120: A0 13 185 SERVEMOUSE LDY #$13
8122: A9 00 186 LDA #$00
8124: 85 06 187 STA BASEADDR
8126: B1 06 188 LDA (BASEADDR),Y
8128: 85 06 189 STA BASEADDR
812A: D0 24 190 BNE MOUSEJMP
191 *
812C: AA 192 CLAMPMOUSE TAX
812D: A0 17 193 LDY #$17
812F: A9 00 194 LDA #$00
8131: 85 06 195 STA BASEADDR
8133: B1 06 196 LDA (BASEADDR),Y
8135: 85 06 197 STA BASEADDR
8137: 8A 198 TXA
8138: 10 16 199 BPL MOUSEJMP
200 *
813A: A0 18 201 HOMEMOUSE LDY #$18
813C: A9 00 202 LDA #$00
813E: 85 06 203 STA BASEADDR
8140: B1 06 204 LDA (BASEADDR),Y
8142: 85 06 205 STA BASEADDR
8144: D0 0A 206 BNE MOUSEJMP
207 *
8146: A0 14 208 READMOUSE LDY #$14
8148: A9 00 209 LDA #$00
814A: 85 06 210 STA BASEADDR
814C: B1 06 211 LDA (BASEADDR),Y
814E: 85 06 212 STA BASEADDR
213 *
8150: A6 07 214 MOUSEJMP LDX BASEADDR+1
8152: A4 08 215 LDY MSLOT
8154: 6C 06 00 216 JMP (BASEADDR)
217 *
8157: 08 218 YIELD PHP
8158: 78 219 SEI
8159: 48 220 PHA
815A: 8A 221 TXA
815B: 48 222 PHA
815C: 98 223 TYA
815D: 48 224 PHA
815E: BA 225 TSX ; FIX JSR RETURN FOR RTI
815F: 8A 226 TXA
8160: 18 227 CLC
8161: 69 05 228 ADC #$05
8163: AA 229 TAX
===== Page 5 =====
8164: FE 00 01 230 INC $0100,X
8167: D0 3C 231 BNE RESETCTR
8169: E8 232 INX
816A: FE 00 01 233 INC $0100,X
816D: D0 36 234 BNE RESETCTR
235
236 *
816F: A5 45 237 IRQ LDA $45
8171: 48 238 PHA
8172: 8A 239 TXA
8173: 48 240 PHA
8174: 98 241 TYA
8175: 48 242 PHA
8176: 20 20 81 243 JSR SERVEMOUSE
8179: B0 4A 244 BCS IRQDONE
817B: 20 46 81 245 JSR READMOUSE
817E: A5 07 246 LDA BASEADDR+1
8180: 29 0F 247 AND #$F
8182: AA 248 TAX
8183: BD 78 04 249 LDA $478,X
8186: 85 1A 250 STA MOUXPOS
8188: BD F8 04 251 LDA $4F8,X
818B: 85 1C 252 STA MOUYPOS
818D: BD 78 05 253 LDA $578,X
8190: 85 1B 254 STA MOUXPOS+1
8192: BD F8 05 255 LDA $5F8,X
8195: 85 1D 256 STA MOUYPOS+1
8197: BD 78 07 257 LDA $778,X
819A: 85 1E 258 STA MOUSTAT
819C: A6 09 259 LDX CTR
819E: E8 260 INX
819F: E0 14 261 CPX #$14
81A1: 86 09 262 STX CTR
81A3: D0 20 263 BNE IRQDONE
81A5: A9 00 264 RESETCTR LDA #$00
81A7: 85 09 265 STA CTR
81A9: A4 19 266 LDY ACT
81AB: 30 05 267 BMI :NEXT ; BOOTSTRAP INITIAL PROCESS
81AD: BA 268 TSX
81AE: 8A 269 TXA
81AF: 99 CC 81 270 STA STKTAB+1,Y
81B2: C8 271 :NEXT INY
81B3: C0 03 272 CPY #MAXP
81B5: D0 02 273 BNE :CTXSW
81B7: A0 00 274 LDY #$00 ; LOOP BACK TO PROCESS 0
81B9: BE CC 81 275 :CTXSW LDX STKTAB+1,Y
81BC: 9A 276 TXS
81BD: 84 19 277 STY ACT
81BF: AD 30 C0 278 LDA SPKR
81C2: AD 30 C0 279 LDA SPKR
81C5: 68 280 IRQDONE PLA
81C6: A8 281 TAY
81C7: 68 282 PLA
81C8: AA 283 TAX
81C9: 68 284 PLA
81CA: 40 285 RTI
286 *
===== Page 6 =====
81CB: 00 00 00 287 STKTAB DS MAXP+1
81CE: 00
288 *
81CF: A2 27 289 PROC2 LDX #$27
81D1: A0 27 290 LDY #$27
81D3: 08 291 :L1 PHP
81D4: 78 292 SEI
81D5: A9 02 293 LDA #BLUE
81D7: 20 64 F8 294 JSR SETCOL
81DA: 8A 295 TXA
81DB: 20 00 F8 296 JSR PLOT
81DE: 28 297 PLP
81DF: 20 57 81 298 JSR YIELD
81E2: 88 299 DEY
81E3: 10 EE 300 BPL :L1
81E5: A0 27 301 LDY #$27
81E7: CA 302 DEX
81E8: 10 E9 303 BPL :L1
81EA: A2 27 304 LDX #$27
81EC: D0 E5 305 BNE :L1
306 *
81EE: A0 00 307 PROC1 LDY #$00
81F0: A2 00 308 LDX #$00
81F2: 08 309 :L1 PHP
81F3: 78 310 SEI
81F4: A9 01 311 LDA #RED
81F6: 20 64 F8 312 JSR SETCOL
81F9: 8A 313 TXA
81FA: 20 00 F8 314 JSR PLOT
81FD: 28 315 PLP
81FE: C8 316 INY
81FF: C0 28 317 CPY #$28
8201: D0 EF 318 BNE :L1
8203: A0 00 319 LDY #$00
8205: 20 57 81 320 JSR YIELD
8208: E8 321 INX
8209: E0 28 322 CPX #$28
820B: D0 E5 323 BNE :L1
820D: A2 00 324 LDX #$00
820F: F0 E1 325 BEQ :L1
8211: 4C EE 81 326 JMP PROC1
327 *
8214: 08 328 PROC0 PHP
8215: 78 329 SEI
8216: A9 00 330 LDA #$00
8218: A2 27 331 LDX #$27 ; MAX X CLAMP
821A: 8D 78 04 332 STA $478
821D: 8E F8 04 333 STX $4F8
8220: 8D 78 05 334 STA $578
8223: 8D F8 05 335 STA $5F8
8226: 20 2C 81 336 JSR CLAMPMOUSE
8229: A0 00 337 LDY #$00
822B: A9 01 338 LDA #$01
822D: A2 27 339 LDX #$27
822F: 8C 78 04 340 STY $478
8232: 8E F8 04 341 STX $4F8
8235: 8C 78 05 342 STY $578
===== Page 7 =====
8238: 8C F8 05 343 STY $5F8
823B: 20 2C 81 344 JSR CLAMPMOUSE
823E: 20 3A 81 345 JSR HOMEMOUSE
8241: 28 346 PLP
8242: AD 53 C0 347 LDA MIX
8245: AD 50 C0 348 LDA GR
8248: 08 349 PHP
8249: 78 350 SEI
824A: 20 36 F8 351 JSR CLRTOP
824D: 28 352 PLP
824E: 2C 00 C0 353 :NEXT BIT KBD
8251: 30 16 354 BMI :CLRIT
8253: 08 355 PHP
8254: 78 356 SEI
8255: A5 1E 357 LDA MOUSTAT ; CHECK BUTTON STATUS
8257: 10 0C 358 BPL :PULL
8259: A9 0F 359 LDA #WHITE
825B: 20 64 F8 360 JSR SETCOL
825E: A5 1C 361 LDA MOUYPOS
8260: A4 1A 362 LDY MOUXPOS
8262: 20 00 F8 363 JSR PLOT
8265: 28 364 :PULL PLP
8266: 4C 4E 82 365 JMP :NEXT
8269: 2C 10 C0 366 :CLRIT BIT KBDSTRB
826C: A0 00 367 LDY #$00
826E: A2 00 368 LDX #$00
8270: 8A 369 :L1 TXA
8271: 08 370 PHP
8272: 78 371 SEI
8273: 20 71 F8 372 JSR SCRN
8276: 28 373 PLP
8277: 48 374 PHA
8278: 68 375 PLA
8279: C9 0F 376 CMP #WHITE
827B: D0 0C 377 BNE :L2
827D: A9 00 378 LDA #BLACK
827F: 08 379 PHP
8280: 78 380 SEI
8281: 20 64 F8 381 JSR SETCOL
8284: 8A 382 TXA ; VERTICAL POSITION IN A-REG
8285: 20 00 F8 383 JSR PLOT
8288: 28 384 PLP
8289: C8 385 :L2 INY
828A: C0 28 386 CPY #$28
828C: D0 E2 387 BNE :L1
828E: A0 00 388 LDY #$00
8290: E8 389 INX
8291: E0 28 390 CPX #$28
8293: D0 DB 391 BNE :L1
8295: A0 00 392 LDY #$00
8297: B9 AA 82 393 :MSGL LDA CLRMSG,Y
829A: F0 0B 394 BEQ :MSGDONE
829C: 09 80 395 ORA #$80
829E: 08 396 PHP
829F: 78 397 SEI
82A0: 20 ED FD 398 JSR COUT
82A3: 28 399 PLP
===== Page 8 =====
82A4: C8 400 INY
82A5: D0 F0 401 BNE :MSGL
82A7: 4C 4E 82 402 :MSGDONE JMP :NEXT
82AA: 43 4C 45 403 CLRMSG ASC B4CLEARB4
82AD: 41 52
82AF: 8D 00 404 HEX 8D00
--End assembly, 689 bytes, Errors: 0
Symbol table - alphabetical order:
ACT =$19 BASEADDR=$06 BLACK =$00 BLUE =$02
CLAMPMOUSE=$812C CLRMSG =$82AA CLRTOP =$F836 COUT =$FDED
CREATEALL=$807C CTR =$09 DOSWARM =$03D0 ? FINDMOUSE=$8010
GR =$C050 HOMEMOUSE=$813A INITMOUSE=$8106 IRQ =$816F
IRQDONE =$81C5 IRQLOC =$03FE KBD =$C000 KBDSTRB =$C010
MAXP =$03 MIX =$C053 MOUID1 =$38 MOUID2 =$18
MOUID3 =$01 MOUID4 =$20 MOUID5 =$D6 MOUIDLOC1=$05
MOUIDLOC2=$07 MOUIDLOC3=$0B MOUIDLOC4=$0C MOUIDLOC5=$FB
MOUSEJMP=$8150 MOUSTAT =$1E MOUXPOS =$1A MOUYPOS =$1C
MSLOT =$08 NEWPROC =$80C0 NOMOUMSG=$8071 PLOT =$F800
PRBYTE =$FDDA ? PRNTAX =$F941 PROC0 =$8214 PROC1 =$81EE
PROC2 =$81CF READMOUSE=$8146 RED =$01 RESETCTR=$81A5
SCRN =$F871 SERVEMOUSE=$8120 SETCOL =$F864 SETMOUSE=$8112
SPKR =$C030 STKTAB =$81CB VBLINT =$09 VBLON =$80EE
WHITE =$0F YIELD =$8157
Symbol table - numerical order:
BLACK =$00 MOUID3 =$01 RED =$01 BLUE =$02
MAXP =$03 MOUIDLOC1=$05 BASEADDR=$06 MOUIDLOC2=$07
MSLOT =$08 VBLINT =$09 CTR =$09 MOUIDLOC3=$0B
MOUIDLOC4=$0C WHITE =$0F MOUID2 =$18 ACT =$19
MOUXPOS =$1A MOUYPOS =$1C MOUSTAT =$1E MOUID4 =$20
MOUID1 =$38 MOUID5 =$D6 MOUIDLOC5=$FB DOSWARM =$03D0
IRQLOC =$03FE ? FINDMOUSE=$8010 NOMOUMSG=$8071 CREATEALL=$807C
NEWPROC =$80C0 VBLON =$80EE INITMOUSE=$8106 SETMOUSE=$8112
SERVEMOUSE=$8120 CLAMPMOUSE=$812C HOMEMOUSE=$813A READMOUSE=$8146
MOUSEJMP=$8150 YIELD =$8157 IRQ =$816F RESETCTR=$81A5
IRQDONE =$81C5 STKTAB =$81CB PROC2 =$81CF PROC1 =$81EE
PROC0 =$8214 CLRMSG =$82AA KBD =$C000 KBDSTRB =$C010
SPKR =$C030 GR =$C050 MIX =$C053 PLOT =$F800
CLRTOP =$F836 SETCOL =$F864 SCRN =$F871 ? PRNTAX =$F941
PRBYTE =$FDDA COUT =$FDED
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