Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.sys.apple2.programmer > #1413 > unrolled thread
| Started by | D Finnigan <dog_cow@macgui.com> |
|---|---|
| First post | 2014-12-18 19:52 +0000 |
| Last post | 2015-01-26 22:48 +0000 |
| Articles | 20 on this page of 21 — 7 participants |
Back to article view | Back to comp.sys.apple2.programmer
Multitasking Mouse Draw Demo v1.3 D Finnigan <dog_cow@macgui.com> - 2014-12-18 19:52 +0000
Source Code for Multitasking Mouse Draw Demo v1.3 D Finnigan <dog_cow@macgui.com> - 2014-12-18 19:56 +0000
Re: Source Code for Multitasking Mouse Draw Demo v1.3 gids.rs@sasktel.net - 2014-12-19 15:24 -0800
Re: Source Code for Multitasking Mouse Draw Demo v1.3 wssimms@gmail.com - 2014-12-27 14:09 -0800
Re: Source Code for Multitasking Mouse Draw Demo v1.3 Michael J. Mahon <mjmahon@aol.com> - 2014-12-27 17:36 -0600
Re: Source Code for Multitasking Mouse Draw Demo v1.3 D Finnigan <dog_cow@macgui.com> - 2014-12-28 13:38 +0000
Re: Source Code for Multitasking Mouse Draw Demo v1.3 gids.rs@sasktel.net - 2014-12-28 10:45 -0800
Re: Source Code for Multitasking Mouse Draw Demo v1.3 wssimms@gmail.com - 2014-12-28 15:14 -0800
Re: Source Code for Multitasking Mouse Draw Demo v1.3 D Finnigan <dog_cow@macgui.com> - 2014-12-29 18:13 +0000
Re: Source Code for Multitasking Mouse Draw Demo v1.3 gids.rs@sasktel.net - 2014-12-29 13:14 -0800
Re: Source Code for Multitasking Mouse Draw Demo v1.3 D Finnigan <dog_cow@macgui.com> - 2014-12-30 09:25 +0000
Re: Source Code for Multitasking Mouse Draw Demo v1.3 "Bill Garber" <willy46pa@comcast.net> - 2014-12-30 05:44 -0500
Re: Source Code for Multitasking Mouse Draw Demo v1.3 D Finnigan <dog_cow@macgui.com> - 2014-12-30 12:25 +0000
Re: Source Code for Multitasking Mouse Draw Demo v1.3 Hugh Hood <hughhood@earthlink.net> - 2014-12-30 08:03 -0600
Re: Source Code for Multitasking Mouse Draw Demo v1.3 D Finnigan <dog_cow@macgui.com> - 2014-12-30 16:57 +0000
Re: Source Code for Multitasking Mouse Draw Demo v1.3 "Bill Garber" <willy46pa@comcast.net> - 2014-12-30 11:48 -0500
Re: Source Code for Multitasking Mouse Draw Demo v1.3 Martin Doherty <martindoherty377@gmail.com> - 2014-12-30 10:22 -0800
Re: Source Code for Multitasking Mouse Draw Demo v1.3 D Finnigan <dog_cow@macgui.com> - 2014-12-30 18:55 +0000
Re: Source Code for Multitasking Mouse Draw Demo v1.3 Michael J. Mahon <mjmahon@aol.com> - 2014-12-30 17:54 -0600
Re: Source Code for Multitasking Mouse Draw Demo v1.3 D Finnigan <dog_cow@macgui.com> - 2014-12-31 10:31 +0000
Re: Source Code for Multitasking Mouse Draw Demo v1.3 D Finnigan <dog_cow@macgui.com> - 2015-01-26 22:48 +0000
Page 1 of 2 [1] 2 Next page →
| From | D Finnigan <dog_cow@macgui.com> |
|---|---|
| Date | 2014-12-18 19:52 +0000 |
| Subject | Multitasking Mouse Draw Demo v1.3 |
| Message-ID | <dog_cow-1418932376@macgui.com> |
Here it is, my last Apple II project for this year 2014. Source code will appear in a followup to this article, and is also available via email. I will send you a disk image. The Multitasking Mouse Draw Demo is a proof-of-concept program that shows how true pre-emptive multitasking is possible on the 8-bit Apple, supporting both a foreground and several background tasks. Version 1.3 supports up to 3 interrupting peripheral cards. ---------------- Changes to system since version 1.2: - TimeMaster II H.O. support - TIMESTOR has HH:MM:SS time - WAIT system call sets sleep time in A-reg - Interrupt-driven keyboard buffer - GETCH call to return characters from keyboard buffer - Interrupt-driven Super Serial Card support (receive only) - GETSSC call to return characters from SSC in buffer Changes to processes since version 1.2: - There are now 7 total processes - New process 5 will periodically display time if clock is installed - Process 0 now uses GETCH for input - Process 0 only clears screen on Escape key press - New process 6 prints characters received by SSC Work for version 1.3 mostly took place at the end of August and start of September, 2014. GETCH added 6th December 2014. SSC support added 16 December 2014. Notes on 17 Dec 14--- The system is tested to work OK on: - Integer Apple II - Apple II Plus - unenhanced Apple IIe - enhanced Apple IIe platinum There is a conflict between the Super Serial Card and the TimeMaster II H.O. clock card when sending interrupts. I don't know if it's a hardware or software problem with the ISR routines. This conflict results in a hang when the first character is received on the SSC on the enhanced IIe platinum. The hang can be cleared by turning off SW 2-6 on the SSC. This conflict results in severely degraded performance, including dropped characters, but no hang, when the SSC receives characters on all other Apple systems. -- ]DF$ Apple II Book: http://macgui.com/newa2guide/ Usenet: http://macgui.com/usenet/ <-- get posts by email! Apple II Web & Blog hosting: http://a2hq.com/
[toc] | [next] | [standalone]
| From | D Finnigan <dog_cow@macgui.com> |
|---|---|
| Date | 2014-12-18 19:56 +0000 |
| Subject | Source Code for Multitasking Mouse Draw Demo v1.3 |
| Message-ID | <dog_cow-multitasking-sourcev1.3-17dec14@macgui.com> |
| In reply to | #1413 |
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 IN EQU $0200 ; KEYBOARD INPUT BUFFER
9 COUT EQU $FDED
10 VBLINT EQU $09
11 MOUIDLOC1 EQU $05 ; LOCATIONS OF MOUSE ID BYTES
12 MOUIDLOC2 EQU $07
13 MOUIDLOC3 EQU $0B
14 MOUIDLOC4 EQU $0C
15 MOUIDLOC5 EQU $FB
16 MOUID1 EQU $38 ; MOUSE ID BYTES
17 MOUID2 EQU $18
18 MOUID3 EQU $01
19 MOUID4 EQU $20
20 MOUID5 EQU $D6
21 CLKIDLOC1 EQU $00 ; LOCATIONS OF CLOCK ID BYTES
22 CLKIDLOC2 EQU $01
23 CLKIDLOC3 EQU $0C
24 CLKIDLOC4 EQU $FE
25 CLKID1 EQU $08 ; CLOCK ID BYTES
26 CLKID2 EQU $78
27 CLKID3 EQU $B8
28 CLKID4 EQU $B2
29 BASEADDR EQU $06 ; 2-BYTES FOR INDEXED ADDRESSING
30 MOUSLOT EQU $08 ; MOUSE CARD SLOT
31 CTR EQU $09 ; IRQ COUNTER
32 ACT EQU $19 ; ACTIVE PROCESS
33 NEWPROCTMP EQU $0A ; TEMP HOLDER FOR NEW PROCESS ID
34 MAXP EQU $07 ; MAXIMUM NUMBER OF PROCESSES
35 MOUXPOS EQU $1A ; 2 BYTES FOR MOUSE X-POSITION
36 MOUYPOS EQU $1C
37 MOUSTAT EQU $1E
38 CLKSLOT EQU $1F ; CLOCK CARD SLOT
39 KINPTR EQU $4A ; KBD BUFFER INCOMING POINTER
40 KOUTPTR EQU $4B ; KBD BUFFER OUTGOING POINTER
41 KBUFCNT EQU $4C ; KBD BUFFER CHARACTER COUNTER
42 *
43 * SSC SUPPORT
44 *
45 SBUFLOC EQU $9000 ; MEMORY LOCATION OF FIFO BUFFER
46 SBUFPTR EQU $56 ; TWO BYTES BASE ADDRESS
47 SINPTR EQU $58 ; INCOMING DATA POINTER (FOR WRITES)
48 SOUTPTR EQU $59 ; OUTGOING DATA POINTER (FOR READS)
49 SBUFCNT EQU $5A ; BUFFER CHARACTER COUNTER
50 SSCSLOT EQU $5B ; SSC SLOT AS $N0
51 *
52 SRDREG EQU $C088 ; READ DATA REGISTER (READ)
53 SSTREG EQU $C089 ; STATUS REGISTER (READ)
54 SRESET EQU $C089 ; SOFTWARE RESET (WRITE)
55 SCMDREG EQU $C08A ; COMMAND REGISTER (R/W)
56 SCTLREG EQU $C08B ; CONTROL REGISTER (R/W)
57 *
58 SSCID1 EQU $38
59 SSCID2 EQU $18
60 SSCID3 EQU $01
61 SSCID4 EQU $31
62 SSCID5 EQU $08
63 SSCLOC1 EQU $05
64 SSCLOC2 EQU $07
65 SSCLOC3 EQU $0B
66 SSCLOC4 EQU $0C
67 SSCLOC5 EQU $FF
68 *
69 PFREE EQU $FF ; PROCESS SLOT FREE - CHANGE WITH CARE
70 PRUN EQU $01 ; RUNNING PROCESS
71 PZOMB EQU $02 ; ZOMBIE PROCESS
72 PSLEEP EQU $03 ; SLEEPING PROCESS
73 *
74 CLRTOP EQU $F836
75 SETCOL EQU $F864
76 PLOT EQU $F800
77 SCRN EQU $F871
78 GR EQU $C050
79 MIX EQU $C053
80 RED EQU $01
81 BLUE EQU $02
82 BLACK EQU $00
83 WHITE EQU $0F
84 *
85 ORG $6000
86 *
6000: A9 9B 87 LDA #$9B
6002: 20 ED FD 88 JSR COUT
6005: A9 91 89 LDA #$91 ; KILL 80-COLS FIRMWARE
6007: 20 ED FD 90 JSR COUT
600A: A2 14 91 LDX #$14
600C: 86 22 92 STX $22 ; TOP OF TEXT WINDOW
600E: CA 93 DEX
600F: 86 25 94 STX $25
95 * FIND MOUSE
6011: A9 00 96 LDA #$00
6013: 85 06 97 STA BASEADDR
6015: A9 C8 98 LDA #$C8
6017: 85 07 99 STA BASEADDR+1
6019: A2 08 100 LDX #$08
601B: CA 101 :LOOP1 DEX
601C: F0 48 102 BEQ :NOMOUSE
601E: C6 07 103 DEC BASEADDR+1
6020: A0 05 104 LDY #MOUIDLOC1
6022: B1 06 105 LDA (BASEADDR),Y
6024: C9 38 106 CMP #MOUID1
6026: D0 F3 107 BNE :LOOP1
6028: A0 07 108 LDY #MOUIDLOC2
602A: B1 06 109 LDA (BASEADDR),Y
602C: C9 18 110 CMP #MOUID2
602E: D0 EB 111 BNE :LOOP1
6030: A0 0B 112 LDY #MOUIDLOC3
6032: B1 06 113 LDA (BASEADDR),Y
6034: C9 01 114 CMP #MOUID3
6036: D0 E3 115 BNE :LOOP1
6038: A0 0C 116 LDY #MOUIDLOC4
603A: B1 06 117 LDA (BASEADDR),Y
603C: C9 20 118 CMP #MOUID4
603E: D0 DB 119 BNE :LOOP1
6040: A0 FB 120 LDY #MOUIDLOC5
6042: B1 06 121 LDA (BASEADDR),Y
6044: C9 D6 122 CMP #MOUID5
6046: D0 D3 123 BNE :LOOP1
6048: 8A 124 TXA
6049: 0A 125 ASL
604A: 0A 126 ASL
604B: 0A 127 ASL
604C: 0A 128 ASL
604D: 85 08 129 STA MOUSLOT
604F: A9 8D 130 LDA #$8D
6051: 20 ED FD 131 JSR COUT
6054: 8A 132 TXA
6055: 20 DA FD 133 JSR PRBYTE
6058: A9 8D 134 LDA #$8D
605A: 20 ED FD 135 JSR COUT
605D: 20 85 60 136 JSR FINDCLOCK
6060: 20 1B 61 137 JSR FINDSSC
6063: 4C A8 61 138 JMP SYSINIT ; SYSTEM INITIALIZATION
6066: A0 00 139 :NOMOUSE LDY #$00
6068: B9 7A 60 140 :LOOP LDA NOMOUMSG,Y
606B: F0 06 141 BEQ :DONE
606D: 20 ED FD 142 JSR COUT
6070: C8 143 INY
6071: D0 F5 144 BNE :LOOP
6073: A9 00 145 :DONE LDA #$00
6075: 85 22 146 STA $22 ; RESTORE TEXT WINDOW
6077: 4C D0 03 147 JMP DOSWARM
607A: 8D CE CF 148 NOMOUMSG HEX 8DCECFA0CDCFD5D3C58D00
607D: A0 CD CF D5 D3 C5 8D 00
149 *
150 * FINDCLOCK
151 *
152 * CURRENTLY TRAINED TO LOOK FOR AN A.E.
153 * TIMEMASTER II H.O.
154 * THIS USES A 6821 PIA AND M5832 CLOCK CHIP
155 *
6085: A9 00 156 FINDCLOCK LDA #$00
6087: 85 06 157 STA BASEADDR
6089: 85 1F 158 STA CLKSLOT
608B: A5 07 159 LDA BASEADDR+1 ; SAVE MOUSE BASEADDR
608D: 48 160 PHA
608E: A9 C8 161 LDA #$C8
6090: 85 07 162 STA BASEADDR+1
6092: A2 08 163 LDX #$08
6094: CA 164 :LOOP1 DEX
6095: F0 3B 165 BEQ :NOCLOCK
6097: C6 07 166 DEC BASEADDR+1
6099: A0 00 167 LDY #CLKIDLOC1
609B: B1 06 168 LDA (BASEADDR),Y
609D: C9 08 169 CMP #CLKID1
609F: D0 F3 170 BNE :LOOP1
60A1: A0 01 171 LDY #CLKIDLOC2
60A3: B1 06 172 LDA (BASEADDR),Y
60A5: C9 78 173 CMP #CLKID2
60A7: D0 EB 174 BNE :LOOP1
60A9: A0 0C 175 LDY #CLKIDLOC3
60AB: B1 06 176 LDA (BASEADDR),Y
60AD: C9 B8 177 CMP #CLKID3
60AF: D0 E3 178 BNE :LOOP1
60B1: A0 FE 179 LDY #CLKIDLOC4
60B3: B1 06 180 LDA (BASEADDR),Y
60B5: C9 B2 181 CMP #CLKID4
60B7: D0 DB 182 BNE :LOOP1
60B9: 8A 183 TXA
60BA: 0A 184 ASL
60BB: 0A 185 ASL
60BC: 0A 186 ASL
60BD: 0A 187 ASL
60BE: 85 1F 188 STA CLKSLOT
60C0: A9 8D 189 LDA #$8D
60C2: 20 ED FD 190 JSR COUT
60C5: 8A 191 TXA
60C6: 20 DA FD 192 JSR PRBYTE
60C9: A9 8D 193 LDA #$8D
60CB: 20 ED FD 194 JSR COUT
60CE: 68 195 PLA ; RESTORE MOUSE BASEADDR
60CF: 85 07 196 STA BASEADDR+1
60D1: 60 197 RTS
60D2: A0 00 198 :NOCLOCK LDY #$00
60D4: B9 10 61 199 :LOOP LDA NOCLKMSG,Y
60D7: F0 06 200 BEQ :DONE
60D9: 20 ED FD 201 JSR COUT
60DC: C8 202 INY
60DD: D0 F5 203 BNE :LOOP
60DF: 68 204 :DONE PLA ; RESTORE MOUSE BASEADDR
60E0: 85 07 205 STA BASEADDR+1
60E2: 60 206 RTS
207 * SETUP 1 SECOND CLOCK INTERRUPTS
60E3: A6 1F 208 INITCLK LDX CLKSLOT
60E5: F0 28 209 BEQ :DONE ; NO CLOCK INSTALLED?
60E7: A9 00 210 LDA #$00 ; POINT AT DIRECTION REGISTERS
60E9: 8D 1C 65 211 STA TIMESTOR ; ZERO-OUT OUR TIME
60EC: 9D 81 C0 212 STA $C081,X ; CONTROL REGISTER A
60EF: 9D 83 C0 213 STA $C083,X ; CONTROL REGISTER B
60F2: 9D 80 C0 214 STA $C080,X ; PORT A - ALL INPUT
60F5: A9 FF 215 LDA #$FF
60F7: 9D 82 C0 216 STA $C082,X ; PORT B - ALL OUTPUT
60FA: A9 0C 217 LDA #$0C ; 1 IRQ/SEC
60FC: 9D 81 C0 218 STA $C081,X
60FF: A9 04 219 LDA #$04 ; 1 IRQ/SEC
6101: 9D 83 C0 220 STA $C083,X
6104: A9 2F 221 LDA #$2F ; ENABLE PIA INTERRUPTS
6106: 9D 82 C0 222 STA $C082,X
6109: BD 80 C0 223 LDA $C080,X ; CLEAR ANY PENDING IRQ
610C: BD 82 C0 224 LDA $C082,X
610F: 60 225 :DONE RTS
6110: 8D CE CF 226 NOCLKMSG HEX 8DCECFA0C3CCCFC3CB8D00
6113: A0 C3 CC CF C3 CB 8D 00
227 *
228 * FIND A SUPER SERIAL CARD
229 * THE SYSTEM WILL COMMUNICATE DIRECTLY TO THE ACIA
230 * IMPORTANT: SWITCH 2-6 FOR INTERRUPTS MUST BE ON!
231 *
232 FINDSSC
611B: A9 00 233 LDA #$00
611D: 85 56 234 STA SBUFPTR
611F: 85 5B 235 STA SSCSLOT
6121: A9 C8 236 LDA #$C8
6123: 85 57 237 STA SBUFPTR+1
6125: A2 08 238 LDX #$08
6127: CA 239 :LOOP1 DEX
6128: F0 40 240 BEQ :NOSSC
612A: C6 57 241 DEC SBUFPTR+1
612C: A0 05 242 LDY #SSCLOC1
612E: B1 56 243 LDA (SBUFPTR),Y
6130: C9 38 244 CMP #SSCID1
6132: D0 F3 245 BNE :LOOP1
6134: A0 07 246 LDY #SSCLOC2
6136: B1 56 247 LDA (SBUFPTR),Y
6138: C9 18 248 CMP #SSCID2
613A: D0 EB 249 BNE :LOOP1
613C: A0 0B 250 LDY #SSCLOC3
613E: B1 56 251 LDA (SBUFPTR),Y
6140: C9 01 252 CMP #SSCID3
6142: D0 E3 253 BNE :LOOP1
6144: A0 0C 254 LDY #SSCLOC4
6146: B1 56 255 LDA (SBUFPTR),Y
6148: C9 31 256 CMP #SSCID4
614A: D0 DB 257 BNE :LOOP1
614C: A0 FF 258 LDY #SSCLOC5
614E: B1 56 259 LDA (SBUFPTR),Y
6150: C9 08 260 CMP #SSCID5
6152: D0 D3 261 BNE :LOOP1
6154: 8A 262 TXA ; SLOT NUMBER IN X
6155: 0A 263 ASL
6156: 0A 264 ASL
6157: 0A 265 ASL
6158: 0A 266 ASL
6159: 85 5B 267 STA SSCSLOT
615B: A9 8D 268 LDA #$8D
615D: 20 ED FD 269 JSR COUT
6160: 8A 270 TXA
6161: 20 DA FD 271 JSR PRBYTE
6164: A9 8D 272 LDA #$8D
6166: 20 ED FD 273 JSR COUT
6169: 60 274 RTS
616A: A0 00 275 :NOSSC LDY #$00
616C: B9 78 61 276 :LOOP LDA :NOSSCM,Y
616F: F0 06 277 BEQ :DONE
6171: 20 ED FD 278 JSR COUT
6174: C8 279 INY
6175: D0 F5 280 BNE :LOOP
6177: 60 281 :DONE RTS
6178: 8D CE CF 282 :NOSSCM HEX 8DCECFA0D3D3C38D00
617B: A0 D3 D3 C3 8D 00
283 * SETUP THE SSC PARAMETERS
6181: A6 5B 284 INITSSC LDX SSCSLOT
6183: F0 22 285 BEQ :DONE ; NO SSC INSTALLED?
6185: A9 00 286 LDA #<SBUFLOC
6187: 85 56 287 STA SBUFPTR
6189: A9 90 288 LDA #>SBUFLOC
618B: 85 57 289 STA SBUFPTR+1
618D: A9 00 290 LDA #$00
618F: 85 58 291 STA SINPTR
6191: 85 59 292 STA SOUTPTR
6193: 85 5A 293 STA SBUFCNT
6195: A4 5B 294 LDY SSCSLOT ; GET SLOT $N0
6197: 99 89 C0 295 STA SRESET,Y
619A: A9 1E 296 LDA #$1E ; 1 STOP, 8 DATA, 9600 BAUD
619C: 99 8B C0 297 STA SCTLREG,Y
619F: A9 09 298 LDA #$09 ; ENABLE IRQ, NO PARITY
61A1: 99 8A C0 299 STA SCMDREG,Y
61A4: B9 88 C0 300 LDA SRDREG,Y
61A7: 60 301 :DONE RTS
302 *
303 *
61A8: 58 304 SYSINIT CLI ; CREATE INITIAL PROCESS 0
61A9: 08 305 PHP
61AA: 78 306 SEI
61AB: A9 FF 307 LDA #PFREE
61AD: 8D F1 64 308 STA STKTAB
61B0: 85 19 309 STA ACT
61B2: A0 06 310 LDY #MAXP-1 ; CLEAR PROCESS TABLES
61B4: 99 0E 65 311 :L1 STA PSTATTAB,Y
61B7: 99 15 65 312 STA ESTATTAB,Y
61BA: 99 07 65 313 STA PPIDTAB,Y
61BD: 88 314 DEY
61BE: 10 F4 315 BPL :L1
61C0: A0 16 316 LDY #$16 ; PRIORITY IN Y-REG
61C2: A9 41 317 LDA #<PROC0
61C4: A2 66 318 LDX #>PROC0
61C6: 20 E1 61 319 JSR NEWPROC
61C9: 20 4A 62 320 JSR VBLON ; ENABLE MOUSE CARD VBL INTERRUPTS
61CC: 20 E3 60 321 JSR INITCLK ; ENABLE CLOCK CARD INTERRUPTS
61CF: 20 81 61 322 JSR INITSSC ; ENABLE SUPER SERIAL CARD INTERRUPTS
323 * PREPARE KEYBOARD BUFFER
61D2: A9 00 324 LDA #$00
61D4: 85 4A 325 STA KINPTR
61D6: 85 4B 326 STA KOUTPTR
61D8: 85 4C 327 STA KBUFCNT
61DA: 8D 00 02 328 STA IN
61DD: 28 329 PLP ; ENABLE IRQ
61DE: 4C DE 61 330 :IDLE JMP :IDLE
331 *
332 * CREATE A NEW PROCESS IN THE SYSTEM
333 * THIS MUST BE CALLED DIRECTLY UNTIL FORK AND EXEC
334 * CALLS ARE ADDED.
335 * Y-REG = PROCESS PRIORITY
336 * A-REG = LOW BYTE OF STARTING ADDRESS
337 * X-REG = HIGH BYTE OF "" ""
338 *
339 * RETURNS WITH NEW PROCESS ID IN Y-REG
340 *
61E1: 08 341 NEWPROC PHP
61E2: 78 342 SEI
61E3: 48 343 PHA
61E4: 8A 344 TXA
61E5: 48 345 PHA
61E6: 98 346 TYA
61E7: 48 347 PHA
61E8: A0 00 348 LDY #$00 ; FIND A FREE PROCESS ID
61EA: B9 0E 65 349 :L1 LDA PSTATTAB,Y ; CHECK PROCESS STATUS
61ED: C9 FF 350 CMP #PFREE ; IS IT FREE?
61EF: F0 08 351 BEQ :FREE ; YES!
61F1: C8 352 INY ; NO, SO MOVE ON TO NEXT ONE
61F2: C0 07 353 CPY #MAXP ; REACHED OUR LIMIT?
61F4: D0 F4 354 BNE :L1 ; NO, SO CARRY ON
61F6: 38 355 SEC ; ERROR, NO FREE PROCESS SLOTS
61F7: B0 50 356 BCS :DONE ; EXIT WITH ERROR CONDITION
61F9: EE F1 64 357 :FREE INC STKTAB ; INCREMENT PROCESS COUNT
61FC: 84 0A 358 STY NEWPROCTMP
61FE: F0 0F 359 BEQ :TSX ; OFFSET FROM CURRENT SP
6200: 88 360 DEY ; OFFSET FROM LAST PROC SP
6201: C4 19 361 CPY ACT ; CURRENT PROCESS?
6203: F0 0A 362 BEQ :TSX
6205: BE F2 64 363 LDX STKTAB+1,Y
6208: 8A 364 TXA
6209: 38 365 SEC
620A: E9 20 366 SBC #$20 ; NEW PROC SP
620C: C8 367 INY
620D: D0 07 368 BNE :STORSP
620F: BA 369 :TSX TSX
6210: 8A 370 TXA
6211: 38 371 SEC
6212: E9 20 372 SBC #$20
6214: A4 0A 373 LDY NEWPROCTMP ; RELOAD NEW PROCESS ID
6216: AA 374 :STORSP TAX
6217: 99 F2 64 375 STA STKTAB+1,Y
621A: 68 376 PLA ; PROCESS PRIORITY
621B: 99 F9 64 377 STA PRIOTAB,Y
621E: 68 378 PLA ; HI-BYTE OF START ADDR
621F: 9D 00 01 379 STA $0100,X
6222: CA 380 DEX
6223: 68 381 PLA ; LO-BYTE OF START ADDR
6224: 9D 00 01 382 STA $0100,X
6227: A9 00 383 LDA #$00 ; INITIAL PROCESSOR STATUS
6229: CA 384 DEX
622A: 9D 00 01 385 STA $0100,X
622D: CA 386 DEX
622E: 9D 00 01 387 STA $0100,X ; INITIAL REGISTERS
6231: CA 388 DEX
6232: 9D 00 01 389 STA $0100,X
6235: CA 390 DEX
6236: 9D 00 01 391 STA $0100,X
6239: CA 392 DEX
623A: 8A 393 TXA
623B: 99 F2 64 394 STA STKTAB+1,Y
623E: A5 19 395 LDA ACT ; GET PARENT PROCESS ID
6240: 99 07 65 396 STA PPIDTAB,Y ; STORE IN PPID TABLE
6243: A9 01 397 LDA #PRUN ; PROCESS STATUS
6245: 99 0E 65 398 STA PSTATTAB,Y
6248: 28 399 PLP
6249: 60 400 :DONE RTS
401 *
624A: A9 01 402 VBLON LDA #$01
624C: 20 6E 62 403 JSR SETMOUSE
624F: 20 62 62 404 JSR INITMOUSE
6252: A9 8D 405 LDA #<IRQ
6254: 8D FE 03 406 STA IRQLOC
6257: A9 63 407 LDA #>IRQ
6259: 8D FF 03 408 STA IRQLOC+1
625C: A9 09 409 LDA #VBLINT
625E: 20 6E 62 410 JSR SETMOUSE ; TURN ON MOUSE VBL INTERRUPTS
6261: 60 411 RTS
412 *
413 * ON APPLE II AND II PLUS, THIS WILL CLEAR HGR PAGE 1 ($2000)
6262: A0 19 414 INITMOUSE LDY #$19
6264: A9 00 415 LDA #$00
6266: 85 06 416 STA BASEADDR
6268: B1 06 417 LDA (BASEADDR),Y
626A: 85 06 418 STA BASEADDR
626C: D0 3E 419 BNE MOUSEJMP
420 *
626E: A0 12 421 SETMOUSE LDY #$12
6270: AA 422 TAX
6271: A9 00 423 LDA #$00
6273: 85 06 424 STA BASEADDR
6275: B1 06 425 LDA (BASEADDR),Y
6277: 85 06 426 STA BASEADDR
6279: 8A 427 TXA
627A: 10 30 428 BPL MOUSEJMP
429 *
627C: A0 13 430 SERVEMOUSE LDY #$13
627E: A9 00 431 LDA #$00
6280: 85 06 432 STA BASEADDR
6282: B1 06 433 LDA (BASEADDR),Y
6284: 85 06 434 STA BASEADDR
6286: D0 24 435 BNE MOUSEJMP
436 *
6288: AA 437 CLAMPMOUSE TAX
6289: A0 17 438 LDY #$17
628B: A9 00 439 LDA #$00
628D: 85 06 440 STA BASEADDR
628F: B1 06 441 LDA (BASEADDR),Y
6291: 85 06 442 STA BASEADDR
6293: 8A 443 TXA
6294: 10 16 444 BPL MOUSEJMP
445 *
6296: A0 18 446 HOMEMOUSE LDY #$18
6298: A9 00 447 LDA #$00
629A: 85 06 448 STA BASEADDR
629C: B1 06 449 LDA (BASEADDR),Y
629E: 85 06 450 STA BASEADDR
62A0: D0 0A 451 BNE MOUSEJMP
452 *
62A2: A0 14 453 READMOUSE LDY #$14
62A4: A9 00 454 LDA #$00
62A6: 85 06 455 STA BASEADDR
62A8: B1 06 456 LDA (BASEADDR),Y
62AA: 85 06 457 STA BASEADDR
458 *
62AC: A6 07 459 MOUSEJMP LDX BASEADDR+1
62AE: A4 08 460 LDY MOUSLOT
62B0: 6C 06 00 461 JMP (BASEADDR)
462 *
463 * RETURN A SINGLE CHARACTER FROM THE KEYBOARD BUFFER
464 * CARRY FLAG SET IF THE BUFFER IS EMPTY, ELSE CHAR
465 * IS IN A-REG WITH CARRY CLEAR
466 * X-REG IS NOT SAVED!
467 GETCH
62B3: 38 468 SEC
62B4: A5 4C 469 LDA KBUFCNT
62B6: F0 0A 470 BEQ :DONE
62B8: A6 4B 471 LDX KOUTPTR
62BA: BD 00 02 472 LDA IN,X
62BD: C6 4C 473 DEC KBUFCNT
62BF: E6 4B 474 INC KOUTPTR
62C1: 18 475 CLC
62C2: 60 476 :DONE RTS
477 *
478 * RETURN A SINGLE CHARACTER FROM THE SSC BUFFER
479 * CARRY FLAG IS SET IF THE BUFFER IS EMPTY, ELSE CHAR
480 * IS IN A-REG WITH CARRY CLEAR
481 * Y-REG IS NOT SAVED!
482 GETSSC
62C3: 38 483 SEC
62C4: A5 5A 484 LDA SBUFCNT
62C6: F0 09 485 BEQ :DONE
62C8: A4 59 486 LDY SOUTPTR
62CA: B1 56 487 LDA (SBUFPTR),Y
62CC: C6 5A 488 DEC SBUFCNT
62CE: E6 59 489 INC SOUTPTR
62D0: 18 490 CLC
62D1: 60 491 :DONE RTS
492 *
493 *
494 * TERMINATE A PROCESS AND RETURN A STATUS CODE
495 * TO THE PARENT PROCESS
496 * A-REG HOLDS THE STATUS CODE
497 *
62D2: A4 19 498 EXIT LDY ACT ; GET PROCESS ID
62D4: 99 15 65 499 STA ESTATTAB,Y ; STORE EXIT STATUS
62D7: A9 02 500 LDA #PZOMB
62D9: 99 0E 65 501 STA PSTATTAB,Y ; BECOME A ZOMBIE
62DC: A4 19 502 :L0 LDY ACT ; SEARCH PROCESS TABLE FOR OUR PARENT
62DE: B9 07 65 503 LDA PPIDTAB,Y ; GET OUR PARENT PROCESS ID
62E1: C9 FF 504 CMP #PFREE ; CHECK IF THE PROCESS STILL EXISTS
62E3: F0 22 505 BEQ :NOPARENT ; NO PARENT PROCESS
62E5: 98 506 :PARENT TYA ; FOUND PARENT; SAVE ITS PID
62E6: 48 507 PHA
62E7: A0 01 508 LDY #$01 ; PROCESS 1 (INIT)
62E9: 20 4A 63 509 JSR WAKEUP
62EC: 68 510 PLA
62ED: A8 511 TAY ; RESTORE SAVED PID
62EE: 20 4A 63 512 JSR WAKEUP ; NOW WAKE UP THE PARENT PROCESS
513 * SEARCH FOR CHILDREN
62F1: A0 00 514 LDY #$00 ; INITIALIZE PROCESS ID FOR LOOP
62F3: B9 07 65 515 :CL1 LDA PPIDTAB,Y ; GET THE PARENT PROCESS ID
62F6: C5 19 516 CMP ACT ; IS IT OUR PROCESS ID?
62F8: D0 05 517 BNE :CNEXT ; NO, SO MOVE ON
62FA: A9 01 518 LDA #$01 ; NEW PARENT PID IS 1 (INIT)
62FC: 99 07 65 519 STA PPIDTAB,Y ; SET THE NEW PPID
520 * TODO: CHECK FOR STOPPED PROCESS
62FF: C8 521 :CNEXT INY ; POINT TO NEXT PROCESS ID
6300: C9 07 522 CMP #MAXP ; AT PROCESS LIMIT?
6302: D0 EF 523 BNE :CL1 ; NO, SO CONTINUE
6304: 4C E5 63 524 JMP RESETCTR ; RUN NEXT PROCESS
6307: A9 01 525 :NOPARENT LDA #$01 ; PARENT IS NOW PID 1 (INIT)
6309: 99 07 65 526 STA PPIDTAB,Y ; UPDATE OUR PROCESS PARENT
630C: D0 CE 527 BNE :L0 ; DO THE PARENT CHECK AGAIN (ALWAYS TAKEN)
528 *
529 * WAIT FOREVER FOR A CHILD PROCESS TO TERMINATE
530 * AND COLLECT ITS TERMINATION STATUS
531 * A-REG = TERMINATION STATUS
532 * Y-REG = CHILD PROCESS ID
533 * CARRY SET = ERROR: NO CHILD PROCESSES EXIST
534 *
630E: A2 00 535 WAIT LDX #$00 ; USED AS ANY CHILD FOUND FLAG
6310: A0 00 536 :L1 LDY #00 ; SEARCH PROCESS TABLE FOR OUR CHILDREN
6312: B9 07 65 537 :L2 LDA PPIDTAB,Y ; GET CHILD STATUS
6315: C5 19 538 CMP ACT ; OUR CHILD?
6317: D0 08 539 BNE :NEXT ; NO
6319: E8 540 INX ; FOUND AT LEAST ONE CHILD
631A: B9 0E 65 541 LDA PSTATTAB,Y ; GET PROCESS STATUS
631D: C9 02 542 CMP #PZOMB ; IS A ZOMBIE?
631F: F0 10 543 BEQ :COLL ; YES, SO COLLECT STATUS
6321: C8 544 :NEXT INY
6322: C0 07 545 CPY #MAXP ; SEARCHED THE ENTIRE PROCESS TABLE?
6324: D0 EC 546 BNE :L2
6326: 8A 547 TXA ; CHECK OUR CHILD FLAG
6327: F0 1D 548 BEQ :NOCHILD ; NO CHILDREN, SO RETURN ERROR
6329: A9 7F 549 LDA #$7F ; SLEEP TIME
632B: 20 5B 63 550 JSR SLEEP ; GO TO SLEEP
632E: 4C 10 63 551 JMP :L1 ; LOOK FOR CHILDREN AGAIN
6331: B9 15 65 552 :COLL LDA ESTATTAB,Y ; EXIT STATUS OF CHILD PROCESS
6334: 48 553 PHA
6335: A9 FF 554 LDA #PFREE ; CLEAR PROCESS SLOT
6337: 99 0E 65 555 STA PSTATTAB,Y
633A: 99 07 65 556 STA PPIDTAB,Y
633D: 99 15 65 557 STA ESTATTAB,Y
6340: CE F1 64 558 DEC STKTAB ; DECREMENT PROCESS COUNT
6343: 68 559 PLA ; GET EXIT STATUS BACK
6344: 18 560 CLC ; NO ERROR
6345: 60 561 RTS
6346: 68 562 :NOCHILD PLA
6347: AA 563 TAX
6348: 38 564 SEC ; ERROR FLAG
6349: 60 565 RTS
566 *
567 * FORCIBLY WAKE A SLEEPING PROCESS
568 * IF PROCESS IS NOT ASLEEP, NOTHING HAPPENS
569 * Y-REG HOLDS PROCESS ID
570 *
634A: C0 07 571 WAKEUP CPY #MAXP
634C: F0 0C 572 BEQ :DONE ; OVER LIMIT
634E: B9 0E 65 573 LDA PSTATTAB,Y ; GET PROCESS STATUS
6351: C9 03 574 CMP #PSLEEP ; IS IT SLEEPING?
6353: D0 05 575 BNE :DONE ; NO, SO EXIT NOW
6355: A9 01 576 LDA #PRUN ; RUN STATUS
6357: 99 0E 65 577 STA PSTATTAB,Y ; SET NEW STATUS
635A: 60 578 :DONE RTS
579 *
580 * PUT A PROCESS TO SLEEP FOR A TIME
581 * A-REG HOLDS SLEEPING TIME
582 *
635B: 08 583 SLEEP PHP
635C: 78 584 SEI
635D: 48 585 PHA
635E: 8A 586 TXA
635F: 48 587 PHA
6360: 98 588 TYA
6361: 48 589 PHA
6362: A4 19 590 LDY ACT
6364: BA 591 TSX ; GET SLEEP DURATION...
6365: E8 592 INX ; ...OUT OF THE STACK
6366: E8 593 INX
6367: E8 594 INX
6368: BD 00 01 595 LDA $0100,X
636B: 99 00 65 596 STA SLPTAB,Y ; STORE SLEEP DURATION
636E: A9 03 597 LDA #PSLEEP
6370: 99 0E 65 598 STA PSTATTAB,Y ; SET PROCESS STATUS TO SLEEPING
6373: D0 07 599 BNE YIELD2 ; ALWAYS TAKEN
600 *
601 * GIVE UP REMAINING CPU TIME FOR THIS PROCESS
602 *
6375: 08 603 YIELD PHP
6376: 78 604 SEI
6377: 48 605 PHA
6378: 8A 606 TXA
6379: 48 607 PHA
637A: 98 608 TYA
637B: 48 609 PHA
637C: BA 610 YIELD2 TSX ; FIX JSR RETURN FOR RTI
637D: 8A 611 TXA
637E: 18 612 CLC
637F: 69 05 613 ADC #$05
6381: AA 614 TAX
6382: FE 00 01 615 INC $0100,X
6385: D0 5E 616 BNE RESETCTR
6387: E8 617 INX
6388: FE 00 01 618 INC $0100,X
638B: D0 58 619 BNE RESETCTR
620 *
621 * THE MAIN INTERRUPT HANDLER
622 *
638D: A5 45 623 IRQ LDA $45
638F: 48 624 PHA
6390: 8A 625 TXA
6391: 48 626 PHA
6392: 98 627 TYA
6393: 48 628 PHA
6394: 20 7C 62 629 JSR SERVEMOUSE ; DID THE MOUSE CAUSE THE IRQ?
6397: 90 03 630 BCC :DOMOU ; OR SEE IF THE CLOCK DID IT
6399: 4C 30 64 631 JMP CHECKCLK
639C: 20 A2 62 632 :DOMOU JSR READMOUSE ; GET CURRENT MOUSE COORDS
639F: A5 07 633 LDA BASEADDR+1
63A1: 29 0F 634 AND #$F
63A3: AA 635 TAX
63A4: BD 78 04 636 LDA $478,X
63A7: 85 1A 637 STA MOUXPOS
63A9: BD F8 04 638 LDA $4F8,X
63AC: 85 1C 639 STA MOUYPOS
63AE: BD 78 05 640 LDA $578,X
63B1: 85 1B 641 STA MOUXPOS+1
63B3: BD F8 05 642 LDA $5F8,X
63B6: 85 1D 643 STA MOUYPOS+1
63B8: BD 78 07 644 LDA $778,X
63BB: 85 1E 645 STA MOUSTAT
646 * CHECK KEYBOARD
63BD: 2C 00 C0 647 BIT KBD
63C0: 10 0F 648 BPL :NEXT ; NO KEY PRESSED
63C2: AD 00 C0 649 LDA KBD
63C5: A6 4A 650 LDX KINPTR
63C7: 9D 00 02 651 STA IN,X
63CA: E6 4C 652 INC KBUFCNT
63CC: E6 4A 653 INC KINPTR
63CE: 8D 10 C0 654 STA KBDSTRB
63D1: A4 19 655 :NEXT LDY ACT ; CURRENT PROCESS ID
63D3: 30 1B 656 BMI IRQNEXT ; BOOTSTRAP INITIAL PROCESS
63D5: AD F1 64 657 LDA STKTAB ; RUNNING PROCESS COUNT
63D8: F0 50 658 BEQ IRQDONE ; ONLY 1 PROCESS
63DA: A5 09 659 :CTR LDA CTR
63DC: D9 F9 64 660 CMP PRIOTAB,Y ; HAS PROCESS REACHED ITS TIME LIMIT?
63DF: F0 04 661 BEQ RESETCTR ; YES, SO PREPARE TO SWITCH
63E1: E6 09 662 INC CTR
63E3: D0 45 663 BNE IRQDONE ; PROCESS NOT SWITCHED
63E5: A9 00 664 RESETCTR LDA #$00
63E7: 85 09 665 STA CTR
63E9: A4 19 666 LDY ACT
63EB: BA 667 TSX
63EC: 8A 668 TXA
63ED: 99 F2 64 669 STA STKTAB+1,Y
63F0: C8 670 IRQNEXT INY ; SWITCH TO NEXT PROCESS
63F1: C0 07 671 CPY #MAXP
63F3: F0 13 672 BEQ :L2 ; GO BACK TO START OF PROCESS TABLE
63F5: B9 0E 65 673 :L1 LDA PSTATTAB,Y ; GET PRCESS STATUS
63F8: C9 01 674 CMP #PRUN ; IS THIS A RUNNABLE PROCESS?
63FA: F0 22 675 BEQ :CTXSW ; YES, SO SWITCH IT IN
63FC: C9 FF 676 CMP #PFREE ; IS THIS PROCESS SLOT ACTIVE?
63FE: F0 F0 677 BEQ IRQNEXT ; YES, SO SKIP IT
6400: C9 03 678 CMP #PSLEEP ; IS PROCESS ASLEEP?
6402: F0 08 679 BEQ :SLEEP ; YES, SO DECREMENT ITS SLEEP TIMER
6404: C9 02 680 CMP #PZOMB ; IS THIS PROCESS A ZOMBIE?
6406: F0 E8 681 BEQ IRQNEXT ; YES, SO SKIP IT
6408: A0 00 682 :L2 LDY #$00 ; LOOP BACK TO PROCESS 0
640A: F0 E9 683 BEQ :L1 ; ALWAYS TAKEN
640C: B9 00 65 684 :SLEEP LDA SLPTAB,Y
640F: F0 0D 685 BEQ :CTXSW ; PROCESS IS NOT ASLEEP
6411: AA 686 TAX
6412: CA 687 DEX
6413: 8A 688 TXA
6414: 99 00 65 689 STA SLPTAB,Y
6417: D0 D7 690 BNE IRQNEXT ; PROCESS STILL HAS SLEEP TIME
6419: A9 01 691 LDA #PRUN ; PROCESS IS NOW RUNNABLE
641B: 99 0E 65 692 STA PSTATTAB,Y ; SET THIS NEW STATUS
641E: BE F2 64 693 :CTXSW LDX STKTAB+1,Y
6421: 9A 694 TXS ; RESTORE THE PROCESS STACK POINTER
6422: 84 19 695 STY ACT ; ACTIVE PROCESS ID
6424: AD 30 C0 696 LDA SPKR
6427: AD 30 C0 697 LDA SPKR
642A: 68 698 IRQDONE PLA
642B: A8 699 TAY
642C: 68 700 PLA
642D: AA 701 TAX
642E: 68 702 PLA
642F: 40 703 RTI
6430: A6 1F 704 CHECKCLK LDX CLKSLOT ; GET SLOT NUMBER OF CLOCK
6432: F0 7E 705 BEQ CHECKSSC ; NO CLOCK INSTALLED?
6434: BD 81 C0 706 LDA $C081,X ; IRQ FROM CLOCK?
6437: 10 79 707 BPL CHECKSSC ; NO, SO MOVE ON
6439: BD 80 C0 708 LDA $C080,X ; CLEAR THE IRQ FLAG
709 * READ CLOCK DIGITS- HH:MM:SS
643C: A9 10 710 LDA #$10
643E: 9D 82 C0 711 STA $C082,X ; HOLD CLOCK
6441: A9 35 712 LDA #$35 ; ADDRESS H10 DIGIT
6443: 9D 82 C0 713 STA $C082,X
6446: BD 80 C0 714 LDA $C080,X ; READ DIGIT
6449: 29 03 715 AND #$03 ; MASK OUT BITS
644B: 09 B0 716 ORA #$B0 ; CONVERT TO ASCII
644D: 8D 1C 65 717 STA TIMESTOR ; SAVE IT
6450: A9 34 718 LDA #$34 ; H01
6452: 9D 82 C0 719 STA $C082,X
6455: BD 80 C0 720 LDA $C080,X ; READ DIGIT
6458: 29 0F 721 AND #$0F ; MASK OUT BITS
645A: 09 B0 722 ORA #$B0 ; CONVERT TO ASCII
645C: 8D 1D 65 723 STA TIMESTOR+1 ; SAVE IT
645F: A9 33 724 LDA #$33
6461: 9D 82 C0 725 STA $C082,X
6464: BD 80 C0 726 LDA $C080,X
6467: 29 07 727 AND #$07
6469: 09 B0 728 ORA #$B0
646B: 8D 1E 65 729 STA TIMESTOR+2
646E: A9 32 730 LDA #$32
6470: 9D 82 C0 731 STA $C082,X
6473: BD 80 C0 732 LDA $C080,X
6476: 29 0F 733 AND #$0F
6478: 09 B0 734 ORA #$B0
647A: 8D 1F 65 735 STA TIMESTOR+3
647D: A9 31 736 LDA #$31 ; S10 DIGIT
647F: 9D 82 C0 737 STA $C082,X
6482: BD 80 C0 738 LDA $C080,X
6485: 29 07 739 AND #$07
6487: 09 B0 740 ORA #$B0
6489: 8D 20 65 741 STA TIMESTOR+4
648C: A9 30 742 LDA #$30 ; S01 DIGIT
648E: 9D 82 C0 743 STA $C082,X
6491: BD 80 C0 744 LDA $C080,X
6494: 29 0F 745 AND #$0F
6496: 09 B0 746 ORA #$B0
6498: 8D 21 65 747 STA TIMESTOR+5
649B: A9 2F 748 LDA #$2F
649D: 9D 82 C0 749 STA $C082,X ; RELEASE CLOCK HOLD
750 *
64A0: A9 0C 751 LDA #$0C
64A2: 9D 81 C0 752 STA $C081,X
64A5: A9 04 753 LDA #$04
64A7: 9D 83 C0 754 STA $C083,X
64AA: A9 2F 755 LDA #$2F ; REPRIME THE CLOCK FOR IRQ
64AC: 9D 82 C0 756 STA $C082,X
64AF: 4C 2A 64 757 JMP IRQDONE
758 * SERVICE AN IRQ FROM THE SSC
64B2: A4 5B 759 CHECKSSC LDY SSCSLOT
64B4: F0 33 760 BEQ NOIRQ ; NO SSC INSTALLED?
64B6: B9 89 C0 761 LDA SSTREG,Y ; BIT 7 SET ON IRQ
64B9: 10 2E 762 BPL NOIRQ ; WASN'T SSC, SO MOVE ON
64BB: A8 763 TAY
64BC: 29 08 764 AND #$08
64BE: F0 29 765 BEQ NOIRQ
64C0: 98 766 TYA
64C1: 29 07 767 AND #$07 ; ANY ERROR?
64C3: F0 0B 768 BEQ :GET2
64C5: A4 5B 769 LDY SSCSLOT ; BRANCH HERE ON ERROR
64C7: B9 88 C0 770 LDA SRDREG,Y
64CA: 20 E0 64 771 JSR SSCWRITE
64CD: 4C 2A 64 772 JMP IRQDONE
64D0: A4 5B 773 :GET2 LDY SSCSLOT ; NO RECEIVE ERROR
64D2: B9 88 C0 774 LDA SRDREG,Y
64D5: A4 58 775 LDY SINPTR
64D7: 91 56 776 STA (SBUFPTR),Y
64D9: E6 5A 777 INC SBUFCNT
64DB: E6 58 778 INC SINPTR
64DD: 4C 2A 64 779 JMP IRQDONE
780 SSCWRITE
64E0: A4 58 781 LDY SINPTR
64E2: 91 56 782 STA (SBUFPTR),Y
64E4: E6 5A 783 INC SBUFCNT
64E6: E6 58 784 INC SINPTR
64E8: 60 785 RTS
64E9: A9 BF 786 NOIRQ LDA #$BF ; SPURIOUS INTERRUPT?
64EB: 20 ED FD 787 JSR COUT
64EE: 4C 2A 64 788 JMP IRQDONE
789 *
64F1: 00 00 00 790 STKTAB DS MAXP+1
64F4: 00 00 00 00 00
64F9: 00 00 00 791 PRIOTAB DS MAXP ; PROCESS PRIORITIES TABLE
64FC: 00 00 00 00
6500: 00 00 00 792 SLPTAB DS MAXP ; SLEEPING PROCESSES TABLE
6503: 00 00 00 00
6507: 00 00 00 793 PPIDTAB DS MAXP ; PARENT PROCESS ID TABLE
650A: 00 00 00 00
650E: 00 00 00 794 PSTATTAB DS MAXP ; PROCESS STATUS TABLE
6511: 00 00 00 00
6515: 00 00 00 795 ESTATTAB DS MAXP ; PROCESS EXIT STATUS TABLE
6518: 00 00 00 00
796 *
651C: 00 00 00 797 TIMESTOR DS 6 ; SYSTEM TIME- HH:MM:SS
651F: 00 00 00
798 *
6522: A6 5B 799 PROC6 LDX SSCSLOT ; IS THE SSC INSTALLED?
6524: F0 16 800 BEQ :DONE ; NO, SO EXIT
6526: 20 C3 62 801 :L JSR GETSSC
6529: B0 0B 802 BCS :L2 ; NO NEW DATA
652B: 09 80 803 ORA #$80 ; SET HI-BIT FOR COUT
652D: 08 804 PHP
652E: 78 805 SEI
652F: 20 ED FD 806 JSR COUT
6532: 28 807 PLP
6533: 4C 26 65 808 JMP :L
6536: 20 75 63 809 :L2 JSR YIELD ; ALLOW NEXT PROC TO RUN
6539: 4C 26 65 810 JMP :L
653C: A9 01 811 :DONE LDA #$01 ; EXIT IF NO SSC
653E: 20 D2 62 812 JSR EXIT
813 *
6541: A6 1F 814 PROC5 LDX CLKSLOT ; IS THE CLOCK INSTALLED?
6543: F0 40 815 BEQ :DONE ; NO, SO EXIT
6545: 08 816 :PRINTIT PHP
6546: 78 817 SEI ; NO IRQ WHILE WE PRINT TIME
6547: AD 1C 65 818 LDA TIMESTOR ; GET HOURS DIGIT
654A: F0 31 819 BEQ :SLEEP ; NO CLOCK TIME YET?
654C: 20 ED FD 820 JSR COUT
654F: AD 1D 65 821 LDA TIMESTOR+1 ; HOURS DIGIT
6552: 20 ED FD 822 JSR COUT
6555: A9 BA 823 LDA #$BA ; COLON
6557: 20 ED FD 824 JSR COUT
655A: AD 1E 65 825 LDA TIMESTOR+2 ; MINUTES
655D: 20 ED FD 826 JSR COUT
6560: AD 1F 65 827 LDA TIMESTOR+3 ; MINUTES
6563: 20 ED FD 828 JSR COUT
6566: A9 BA 829 LDA #$BA ; COLON
6568: 20 ED FD 830 JSR COUT
656B: AD 20 65 831 LDA TIMESTOR+4 ; SECONDS
656E: 20 ED FD 832 JSR COUT
6571: AD 21 65 833 LDA TIMESTOR+5 ; SECONDS
6574: 20 ED FD 834 JSR COUT
6577: A9 8D 835 LDA #$8D ; CR
6579: 20 ED FD 836 JSR COUT
657C: 28 837 PLP ; RE-ENABLE IRQ
657D: A9 40 838 :SLEEP LDA #$40 ; SLEEP FOR 64 TICKS
657F: 20 5B 63 839 JSR SLEEP
6582: 4C 45 65 840 JMP :PRINTIT ; PRINT TIME AGAIN
6585: A9 01 841 :DONE LDA #$01 ; EXIT IF NO CLOCK
6587: 20 D2 62 842 JSR EXIT
843 *
844 PROC4
658A: A0 00 845 LDY #$00
658C: A2 00 846 LDX #$00
658E: 8A 847 :L1 TXA
658F: 08 848 PHP
6590: 78 849 SEI
6591: 20 71 F8 850 JSR SCRN
6594: 28 851 PLP
6595: 48 852 PHA
6596: 68 853 PLA
6597: C9 0F 854 CMP #WHITE
6599: D0 0C 855 BNE :L2
659B: A9 00 856 LDA #BLACK
659D: 08 857 PHP
659E: 78 858 SEI
659F: 20 64 F8 859 JSR SETCOL
65A2: 8A 860 TXA ; VERTICAL POSITION IN A-REG
65A3: 20 00 F8 861 JSR PLOT
65A6: 28 862 PLP
65A7: C8 863 :L2 INY
65A8: C0 28 864 CPY #$28
65AA: D0 E2 865 BNE :L1
65AC: A0 00 866 LDY #$00
65AE: E8 867 INX
65AF: E0 28 868 CPX #$28
65B1: D0 DB 869 BNE :L1
65B3: A0 00 870 LDY #$00
65B5: B9 CA 65 871 :MSGL LDA CLRMSG,Y
65B8: F0 0B 872 BEQ :MSGDONE
65BA: 09 80 873 ORA #$80
65BC: 08 874 PHP
65BD: 78 875 SEI
65BE: 20 ED FD 876 JSR COUT
65C1: 28 877 PLP
65C2: C8 878 INY
65C3: D0 F0 879 BNE :MSGL
65C5: A9 01 880 :MSGDONE LDA #$01 ; EXIT CODE
65C7: 20 D2 62 881 JSR EXIT ; TERMINATE THIS PROCESS
65CA: 43 4C 45 882 CLRMSG ASC 'CLEAR'
65CD: 41 52
65CF: 8D 00 883 HEX 8D00
65D1: A5 1E 884 PROC3 LDA MOUSTAT
65D3: 10 17 885 BPL :NEXT
65D5: A5 1A 886 LDA MOUXPOS
65D7: 08 887 PHP
65D8: 78 888 SEI
65D9: 20 DA FD 889 JSR PRBYTE
65DC: A9 A0 890 LDA #$A0
65DE: 20 ED FD 891 JSR COUT
65E1: A5 1C 892 LDA MOUYPOS
65E3: 20 DA FD 893 JSR PRBYTE
65E6: A9 8D 894 LDA #$8D
65E8: 20 ED FD 895 JSR COUT
65EB: 28 896 PLP
65EC: 20 75 63 897 :NEXT JSR YIELD
65EF: 4C D1 65 898 JMP PROC3
899 *
65F2: A2 27 900 PROC2 LDX #$27
65F4: A0 27 901 LDY #$27
65F6: A9 03 902 LDA #$03
65F8: 20 5B 63 903 JSR SLEEP
65FB: 08 904 :L1 PHP
65FC: 78 905 SEI
65FD: A9 02 906 LDA #BLUE
65FF: 20 64 F8 907 JSR SETCOL
6602: 8A 908 TXA
6603: 20 00 F8 909 JSR PLOT
6606: 28 910 PLP
6607: 20 75 63 911 JSR YIELD
660A: 88 912 DEY
660B: 10 EE 913 BPL :L1
660D: A0 27 914 LDY #$27
660F: CA 915 DEX
6610: 10 E9 916 BPL :L1
6612: A2 27 917 LDX #$27
6614: D0 E5 918 BNE :L1
919 *
6616: A0 00 920 PROC1 LDY #$00
6618: A2 00 921 LDX #$00
661A: 08 922 :L1 PHP
661B: 78 923 SEI
661C: A9 01 924 LDA #RED
661E: 20 64 F8 925 JSR SETCOL
6621: 8A 926 TXA
6622: 20 00 F8 927 JSR PLOT
6625: 28 928 PLP
6626: 20 75 63 929 JSR YIELD
6629: C8 930 INY
662A: C0 28 931 CPY #$28
662C: D0 EC 932 BNE :L1
662E: A0 00 933 LDY #$00
6630: A9 07 934 LDA #$07
6632: 20 5B 63 935 JSR SLEEP
6635: E8 936 INX
6636: E0 28 937 CPX #$28
6638: D0 E0 938 BNE :L1
663A: A2 00 939 LDX #$00
663C: F0 DC 940 BEQ :L1
663E: 4C 16 66 941 JMP PROC1
942 *
6641: 08 943 PROC0 PHP
6642: 78 944 SEI
6643: A9 00 945 LDA #$00
6645: A2 27 946 LDX #$27 ; MAX X CLAMP
6647: 8D 78 04 947 STA $478
664A: 8E F8 04 948 STX $4F8
664D: 8D 78 05 949 STA $578
6650: 8D F8 05 950 STA $5F8
6653: 20 88 62 951 JSR CLAMPMOUSE
6656: A0 00 952 LDY #$00
6658: A9 01 953 LDA #$01
665A: A2 27 954 LDX #$27
665C: 8C 78 04 955 STY $478
665F: 8E F8 04 956 STX $4F8
6662: 8C 78 05 957 STY $578
6665: 8C F8 05 958 STY $5F8
6668: 20 88 62 959 JSR CLAMPMOUSE
666B: 20 96 62 960 JSR HOMEMOUSE
666E: 28 961 PLP
666F: AD 53 C0 962 LDA MIX
6672: AD 50 C0 963 LDA GR
6675: 08 964 PHP
6676: 78 965 SEI
6677: 20 36 F8 966 JSR CLRTOP
667A: 28 967 PLP
667B: A0 0B 968 LDY #$0B ; PROCESS PRIORITY
667D: A9 16 969 LDA #<PROC1
667F: A2 66 970 LDX #>PROC1
6681: 20 E1 61 971 JSR NEWPROC
6684: A0 06 972 LDY #$06
6686: A9 F2 973 LDA #<PROC2
6688: A2 65 974 LDX #>PROC2
668A: 20 E1 61 975 JSR NEWPROC
668D: A0 0B 976 LDY #$0B
668F: A9 D1 977 LDA #<PROC3
6691: A2 65 978 LDX #>PROC3
6693: 20 E1 61 979 JSR NEWPROC
6696: A0 01 980 LDY #$01 ; LOW PRIO FOR CLOCK PRINT
6698: A9 41 981 LDA #<PROC5
669A: A2 65 982 LDX #>PROC5
669C: 20 E1 61 983 JSR NEWPROC
669F: A0 0E 984 LDY #$0E ; PRIO FOR SSC READER
66A1: A9 22 985 LDA #<PROC6
66A3: A2 65 986 LDX #>PROC6
66A5: 20 E1 61 987 JSR NEWPROC
66A8: 20 B3 62 988 :NEXT JSR GETCH
66AB: B0 04 989 BCS :PUSH
66AD: C9 9B 990 CMP #$9B ; ESCAPE
66AF: F0 16 991 BEQ :CLRIT
66B1: 08 992 :PUSH PHP
66B2: 78 993 SEI
66B3: A5 1E 994 LDA MOUSTAT ; CHECK BUTTON STATUS
66B5: 10 0C 995 BPL :PULL
66B7: A9 0F 996 LDA #WHITE
66B9: 20 64 F8 997 JSR SETCOL
66BC: A5 1C 998 LDA MOUYPOS
66BE: A4 1A 999 LDY MOUXPOS
66C0: 20 00 F8 1000 JSR PLOT
66C3: 28 1001 :PULL PLP
66C4: 4C A8 66 1002 JMP :NEXT
66C7: A0 04 1003 :CLRIT LDY #$04 ; PROCESS PRIORITY
66C9: A9 8A 1004 LDA #<PROC4
66CB: A2 65 1005 LDX #>PROC4
66CD: 20 E1 61 1006 JSR NEWPROC ; SPAWN THE CHILD PROCESS
66D0: 20 0E 63 1007 JSR WAIT ; AND WAIT FOR IT TO COMPLETE
66D3: 08 1008 PHP
66D4: 78 1009 SEI
66D5: AA 1010 TAX ; MOVE TERM STATUS TO X-REG
66D6: 98 1011 TYA ; MOVE PROC ID TO A-REG
66D7: 20 41 F9 1012 JSR PRNTAX
66DA: A9 8D 1013 LDA #$8D
66DC: 20 ED FD 1014 JSR COUT
66DF: 28 1015 PLP
66E0: 4C A8 66 1016 JMP :NEXT
--End assembly, 1763 bytes, Errors: 0
Symbol table - alphabetical order:
ACT =$19 BASEADDR=$06 BLACK =$00 BLUE =$02
CHECKCLK=$6430 CHECKSSC=$64B2 CLAMPMOUSE=$6288 CLKID1 =$08
CLKID2 =$78 CLKID3 =$B8 CLKID4 =$B2 CLKIDLOC1=$00
CLKIDLOC2=$01 CLKIDLOC3=$0C CLKIDLOC4=$FE CLKSLOT =$1F
CLRMSG =$65CA CLRTOP =$F836 COUT =$FDED CTR =$09
DOSWARM =$03D0 ESTATTAB=$6515 EXIT =$62D2 FINDCLOCK=$6085
FINDSSC =$611B GETCH =$62B3 GETSSC =$62C3 GR =$C050
HOMEMOUSE=$6296 IN =$0200 INITCLK =$60E3 INITMOUSE=$6262
INITSSC =$6181 IRQ =$638D IRQDONE =$642A IRQLOC =$03FE
IRQNEXT =$63F0 KBD =$C000 KBDSTRB =$C010 KBUFCNT =$4C
KINPTR =$4A KOUTPTR =$4B MAXP =$07 MIX =$C053
MOUID1 =$38 MOUID2 =$18 MOUID3 =$01 MOUID4 =$20
MOUID5 =$D6 MOUIDLOC1=$05 MOUIDLOC2=$07 MOUIDLOC3=$0B
MOUIDLOC4=$0C MOUIDLOC5=$FB MOUSEJMP=$62AC MOUSLOT =$08
MOUSTAT =$1E MOUXPOS =$1A MOUYPOS =$1C NEWPROC =$61E1
NEWPROCTMP=$0A NOCLKMSG=$6110 NOIRQ =$64E9 NOMOUMSG=$607A
PFREE =$FF PLOT =$F800 PPIDTAB =$6507 PRBYTE =$FDDA
PRIOTAB =$64F9 PRNTAX =$F941 PROC0 =$6641 PROC1 =$6616
PROC2 =$65F2 PROC3 =$65D1 PROC4 =$658A PROC5 =$6541
PROC6 =$6522 PRUN =$01 PSLEEP =$03 PSTATTAB=$650E
PZOMB =$02 READMOUSE=$62A2 RED =$01 RESETCTR=$63E5
SBUFCNT =$5A SBUFLOC =$9000 SBUFPTR =$56 SCMDREG =$C08A
SCRN =$F871 SCTLREG =$C08B SERVEMOUSE=$627C SETCOL =$F864
SETMOUSE=$626E SINPTR =$58 SLEEP =$635B SLPTAB =$6500
SOUTPTR =$59 SPKR =$C030 SRDREG =$C088 SRESET =$C089
SSCID1 =$38 SSCID2 =$18 SSCID3 =$01 SSCID4 =$31
SSCID5 =$08 SSCLOC1 =$05 SSCLOC2 =$07 SSCLOC3 =$0B
SSCLOC4 =$0C SSCLOC5 =$FF SSCSLOT =$5B SSCWRITE=$64E0
SSTREG =$C089 STKTAB =$64F1 SYSINIT =$61A8 TIMESTOR=$651C
VBLINT =$09 VBLON =$624A WAIT =$630E WAKEUP =$634A
WHITE =$0F YIELD =$6375 YIELD2 =$637C
Symbol table - numerical order:
CLKIDLOC1=$00 BLACK =$00 MOUID3 =$01 CLKIDLOC2=$01
SSCID3 =$01 PRUN =$01 RED =$01 PZOMB =$02
BLUE =$02 PSLEEP =$03 MOUIDLOC1=$05 SSCLOC1 =$05
BASEADDR=$06 MOUIDLOC2=$07 MAXP =$07 SSCLOC2 =$07
CLKID1 =$08 MOUSLOT =$08 SSCID5 =$08 VBLINT =$09
CTR =$09 NEWPROCTMP=$0A MOUIDLOC3=$0B SSCLOC3 =$0B
MOUIDLOC4=$0C CLKIDLOC3=$0C SSCLOC4 =$0C WHITE =$0F
MOUID2 =$18 SSCID2 =$18 ACT =$19 MOUXPOS =$1A
MOUYPOS =$1C MOUSTAT =$1E CLKSLOT =$1F MOUID4 =$20
SSCID4 =$31 MOUID1 =$38 SSCID1 =$38 KINPTR =$4A
KOUTPTR =$4B KBUFCNT =$4C SBUFPTR =$56 SINPTR =$58
SOUTPTR =$59 SBUFCNT =$5A SSCSLOT =$5B CLKID2 =$78
CLKID4 =$B2 CLKID3 =$B8 MOUID5 =$D6 MOUIDLOC5=$FB
CLKIDLOC4=$FE SSCLOC5 =$FF PFREE =$FF IN =$0200
DOSWARM =$03D0 IRQLOC =$03FE NOMOUMSG=$607A FINDCLOCK=$6085
INITCLK =$60E3 NOCLKMSG=$6110 FINDSSC =$611B INITSSC =$6181
SYSINIT =$61A8 NEWPROC =$61E1 VBLON =$624A INITMOUSE=$6262
SETMOUSE=$626E SERVEMOUSE=$627C CLAMPMOUSE=$6288 HOMEMOUSE=$6296
READMOUSE=$62A2 MOUSEJMP=$62AC GETCH =$62B3 GETSSC =$62C3
EXIT =$62D2 WAIT =$630E WAKEUP =$634A SLEEP =$635B
YIELD =$6375 YIELD2 =$637C IRQ =$638D RESETCTR=$63E5
IRQNEXT =$63F0 IRQDONE =$642A CHECKCLK=$6430 CHECKSSC=$64B2
SSCWRITE=$64E0 NOIRQ =$64E9 STKTAB =$64F1 PRIOTAB =$64F9
SLPTAB =$6500 PPIDTAB =$6507 PSTATTAB=$650E ESTATTAB=$6515
TIMESTOR=$651C PROC6 =$6522 PROC5 =$6541 PROC4 =$658A
CLRMSG =$65CA PROC3 =$65D1 PROC2 =$65F2 PROC1 =$6616
PROC0 =$6641 SBUFLOC =$9000 KBD =$C000 KBDSTRB =$C010
SPKR =$C030 GR =$C050 MIX =$C053 SRDREG =$C088
SSTREG =$C089 SRESET =$C089 SCMDREG =$C08A SCTLREG =$C08B
PLOT =$F800 CLRTOP =$F836 SETCOL =$F864 SCRN =$F871
PRNTAX =$F941 PRBYTE =$FDDA COUT =$FDED
[toc] | [prev] | [next] | [standalone]
| From | gids.rs@sasktel.net |
|---|---|
| Date | 2014-12-19 15:24 -0800 |
| Subject | Re: Source Code for Multitasking Mouse Draw Demo v1.3 |
| Message-ID | <11d71bea-89c2-4051-9f9a-432bc53c27d8@googlegroups.com> |
| In reply to | #1414 |
On Thursday, 18 December 2014 13:57:11 UTC-6, D Finnigan wrote: > 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. > <snip> With all these posts of interrupts and buffers and spooling has also renewed my interest of serial and parallel ports, So. Just out of curiosity, does the SSC card have a Que register that lets one know if the SSC is ready to send, like the parallel cards do? With parallel cards, I believe testing $C090 register let's one know when the printer is waiting for a character to be sent to it. This brings up another question. Is it my Epson printer that has a built in 1 kilobyte buffer, or is it the parallel printer card that has the buffer? And does the SSC card possibly have a built in hardware buffer? And how big it might be? So many questions, so much to learn, so little time.
[toc] | [prev] | [next] | [standalone]
| From | wssimms@gmail.com |
|---|---|
| Date | 2014-12-27 14:09 -0800 |
| Subject | Re: Source Code for Multitasking Mouse Draw Demo v1.3 |
| Message-ID | <609cfdf3-d9eb-4902-bd7c-f153e36fb3ab@googlegroups.com> |
| In reply to | #1415 |
The SSC doesn't have a buffer. With your printer the buffer is probably in the card. Buffered cards were very popular. The SSC can be set to interrupt on character received and possibly on character sent, I don't remember about the send interrupt for sure. I always thought an SSC with a FIFO would have been a great enhancement.
[toc] | [prev] | [next] | [standalone]
| From | Michael J. Mahon <mjmahon@aol.com> |
|---|---|
| Date | 2014-12-27 17:36 -0600 |
| Subject | Re: Source Code for Multitasking Mouse Draw Demo v1.3 |
| Message-ID | <1015006957441416023.265945mjmahon-aol.com@news.giganews.com> |
| In reply to | #1428 |
<wssimms@gmail.com> wrote: > The SSC doesn't have a buffer. With your printer the buffer is probably > in the card. Buffered cards were very popular. > > The SSC can be set to interrupt on character received and possibly on > character sent, I don't remember about the send interrupt for sure. I > always thought an SSC with a FIFO would have been a great enhancement. Yes, it also offers a send interrupt. -- -michael - NadaNet 3.1 and AppleCrate II: http://home.comcast.net/~mjmahon
[toc] | [prev] | [next] | [standalone]
| From | D Finnigan <dog_cow@macgui.com> |
|---|---|
| Date | 2014-12-28 13:38 +0000 |
| Subject | Re: Source Code for Multitasking Mouse Draw Demo v1.3 |
| Message-ID | <dog_cow-1419773906@macgui.com> |
| In reply to | #1415 |
gids.rs wrote: > On Thursday, 18 December 2014 13:57:11 UTC-6, D Finnigan wrote: >> 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. >> > > > <snip> > > > With all these posts of interrupts and buffers and spooling has also > renewed my interest of serial and parallel ports, So. > > Just out of curiosity, does the SSC card have a Que register that lets one > know if the SSC is ready to send, like the parallel cards do? Yes. Look at the code for my SSC thing that I posted recently, or consult the appendix of the 1981 SSC ref manual. > > This brings up another question. Is it my Epson printer that has a built > in 1 kilobyte buffer, or is it the parallel printer card that has the > buffer? Could be either one. > > And does the SSC card possibly have a built in hardware buffer? And how > big it might be? > Yes, but it is only enough for one character. > So many questions, so much to learn, so little time. Learning the SSC is not too bad because it has good Apple documentation. In comparison, learning the TimeMaster II HO was much involved because of the inferior Applied Engineering documentation. Had to do a lot of my own reverse-engineering on that one! -- ]DF$ Apple II Book: http://macgui.com/newa2guide/ Usenet: http://macgui.com/usenet/ <-- get posts by email! Apple II Web & Blog hosting: http://a2hq.com/
[toc] | [prev] | [next] | [standalone]
| From | gids.rs@sasktel.net |
|---|---|
| Date | 2014-12-28 10:45 -0800 |
| Subject | Re: Source Code for Multitasking Mouse Draw Demo v1.3 |
| Message-ID | <78931892-3e91-4ea0-ba54-e3e65c77fb55@googlegroups.com> |
| In reply to | #1430 |
> > Just out of curiosity, does the SSC card have a Que register that lets one
> > know if the SSC is ready to send, like the parallel cards do?
>
> Yes. Look at the code for my SSC thing that I posted recently, or consult
> the appendix of the 1981 SSC ref manual.
Your code is no help. You don't use the status reg. And I have all the info of the SSC card. Just trying to clarify some confusion. What confused me was, I saw your code that shows a write to the status register. Didn't see the read to the same register just above it right away.
> > This brings up another question. Is it my Epson printer that has a built
> > in 1 kilobyte buffer, or is it the parallel printer card that has the
> > buffer?
>
> Could be either one.
>
>
> Yes, but it is only enough for one character.
Again, just trying to clarify some confusion since the screen hole information I have mentions an input buffer.
This is the info I have on the SSC card
Address Register Bits Interpretation
$C081+n0 DIPSW1 0 SW1-6 is OFF when 1, ON when 0
(SW1-x) 1 SW1-5 is OFF when 1, ON when 0
4-7 Same as above for SW1-4 through SW1-1
$C082+n0 DIPSW2 0 Clear to Send (CTS) is true when 0
(SW2-x) 1-3 Same as above for SW2-5 through SW2-3
5,7 Same as above for SW2-2 and SW2-1
$C088+n0 TDREG 0-7 ACIA transmit register (write)
RDREG 0-7 ACIA receive register (read)
$C089+n0 STATUS ACIA status/reset register
0 Parity error detected when 1
1 Framing error detected when 1
2 Overrun detected when 1
3 ACIA receive register full when 1
4 ACIA transmit register empt when 1
5 Data Carrier Detect (DCD) true when 0
6 Data Set Ready (DSR) true when 0
7 IRQ has occured when 1
$C08A+n0 COMMAND ACIA Command register (r/w)
0 DTR - enable (1) or disable (0) receiver and all IRQ
1 When 1 allow STATUS bit 3 to cause IRQ
2-3 Control transmit interrupt, RTS level and transmitter
4 0=normal mode for receiver, 1=echo mode-bit2,3 must be 0
5-7 Control Parity
$C08B+n0 Control ACIA control register (r/w)
0-3 baud rate $00=16 x external clock
4 1=use baud rate generator; 0=use external clock (ns)
5-6 # of data bits
7 # of stop bits
and for the Screen Holes:
Super Serial Card
-----------------
$0478+n 1144+n Delay: b0-1=FF b2-3=LF b4-5=CR b6-7=translate option
$04F8+n 1272+n Accumulator for firmware's command processor
$0578+n 1400+n b0-2=cmd mode b3-5=slot to ch to b6=lc b7=terminal/CR
$05F8+n 1528+n b0-6=command byte b7=zap control commands
$0678+n 1656+n Error: b0=parity b1=framing b2=overrun b3=carrier b5=error
$06F8+n 1784+n Modem Mode: b0-2=screen slot b3-7=$Cs00 space entry point
Printer Mode: current printer width
$0778+n 1912+n Modem Mode: input buffer
Printer Mode: current column
$07F8+n 2040+n b0=auto LF b1=comm.mode b2=keyb inp b3=chk XOFF b4=Pascal
b5=ignore LF b6=enable lc/tabs b7=echo
[toc] | [prev] | [next] | [standalone]
| From | wssimms@gmail.com |
|---|---|
| Date | 2014-12-28 15:14 -0800 |
| Subject | Re: Source Code for Multitasking Mouse Draw Demo v1.3 |
| Message-ID | <278a7ba0-a1a2-4213-b0be-5d492e2d13a8@googlegroups.com> |
| In reply to | #1431 |
Am Sonntag, 28. Dezember 2014 13:45:39 UTC-5 schrieb gid...@sasktel.net: > Again, just trying to clarify some confusion since the screen hole information I have mentions an input buffer. I assume that is the input buffer for the SSC firmware, where the commands you type are stored and are parsed.
[toc] | [prev] | [next] | [standalone]
| From | D Finnigan <dog_cow@macgui.com> |
|---|---|
| Date | 2014-12-29 18:13 +0000 |
| Subject | Re: Source Code for Multitasking Mouse Draw Demo v1.3 |
| Message-ID | <dog_cow-1419876806@macgui.com> |
| In reply to | #1431 |
gids.rs wrote: >> > Just out of curiosity, does the SSC card have a Que register that lets >> > one >> > know if the SSC is ready to send, like the parallel cards do? >> >> Yes. Look at the code for my SSC thing that I posted recently, or consult >> the appendix of the 1981 SSC ref manual. > > > Your code is no help. You don't use the status reg. Look at the code, lines 204-207 in the SEND subroutine. It is commented. Source code for Updated Super Serial Card IRQ FIFO Buffer -- ]DF$ Apple II Book: http://macgui.com/newa2guide/ Usenet: http://macgui.com/usenet/ <-- get posts by email! Apple II Web & Blog hosting: http://a2hq.com/
[toc] | [prev] | [next] | [standalone]
| From | gids.rs@sasktel.net |
|---|---|
| Date | 2014-12-29 13:14 -0800 |
| Subject | Re: Source Code for Multitasking Mouse Draw Demo v1.3 |
| Message-ID | <3229e9f1-cd0b-4656-9db2-8ac97459a9d4@googlegroups.com> |
| In reply to | #1434 |
> Look at the code, lines 204-207 in the SEND subroutine. It is commented. > Source code for Updated Super Serial Card IRQ FIFO Buffer Ok. It's official. I hate Google. The small little writing that usually says "Show quoted text" says "show trimmed text" and lo and behold, there is the rest of your program. Doing a search for SSTREG or $C089 obviously doesn't find hidden text. You could have made my life easier by quoting line 758 to 779 of your listing. I would have seen right away that I was missing some lines. But that's not your job, right? :) Everything is falling into place. All is good. No more questions. Now, I just look forward to playing with it.
[toc] | [prev] | [next] | [standalone]
| From | D Finnigan <dog_cow@macgui.com> |
|---|---|
| Date | 2014-12-30 09:25 +0000 |
| Subject | Re: Source Code for Multitasking Mouse Draw Demo v1.3 |
| Message-ID | <dog_cow-1419931563@macgui.com> |
| In reply to | #1438 |
gids.rs wrote: >> Look at the code, lines 204-207 in the SEND subroutine. It is commented. >> Source code for Updated Super Serial Card IRQ FIFO Buffer > > > Now, I just look forward to playing with it. > I can send you disk images of this later. Ask me at the end of January. Btw, while I doubt we will ever have a general purpose multitasking OS for 8-bit Apple, this code (after some more improvements) can be used as a framework for a multithreaded application or even... a game! -- ]DF$ Apple II Book: http://macgui.com/newa2guide/ Usenet: http://macgui.com/usenet/ <-- get posts by email! Apple II Web & Blog hosting: http://a2hq.com/
[toc] | [prev] | [next] | [standalone]
| From | "Bill Garber" <willy46pa@comcast.net> |
|---|---|
| Date | 2014-12-30 05:44 -0500 |
| Subject | Re: Source Code for Multitasking Mouse Draw Demo v1.3 |
| Message-ID | <ANednYHdh5JoHD_JnZ2dnUVZ8vydnZ2d@giganews.com> |
| In reply to | #1439 |
"D Finnigan" <dog_cow@macgui.com> wrote in message news:dog_cow-1419931563@macgui.com... > gids.rs wrote: >>> Look at the code, lines 204-207 in the SEND >>> subroutine. It is commented. Source code for >>> Updated Super Serial Card IRQ FIFO Buffer >> >> Now, I just look forward to playing with it. > > I can send you disk images of this later. > Ask me at the end of January. > > Btw, while I doubt we will ever have a general purpose > multitasking OS for 8-bit Apple, this code (after some > more improvements) can be used as a framework for > a multithreaded application or even... a game! How about once you have made all of the improvements, and at the end of January, you could simply offer up disk images of this on your awesome web site. Bill Garber - I love my C1 D0 D0 CC C5 A0 C9 C9 C7 D3 http://www.sepa-electronics.com
[toc] | [prev] | [next] | [standalone]
| From | D Finnigan <dog_cow@macgui.com> |
|---|---|
| Date | 2014-12-30 12:25 +0000 |
| Subject | Re: Source Code for Multitasking Mouse Draw Demo v1.3 |
| Message-ID | <dog_cow-1419942329@macgui.com> |
| In reply to | #1440 |
Bill Garber wrote: > "D Finnigan" <dog_cow@macgui.com> wrote in > message news:dog_cow-1419931563@macgui.com... >> gids.rs wrote: >>>> Look at the code, lines 204-207 in the SEND >>>> subroutine. It is commented. Source code for >>>> Updated Super Serial Card IRQ FIFO Buffer >>> >>> Now, I just look forward to playing with it. >> >> I can send you disk images of this later. >> Ask me at the end of January. >> >> Btw, while I doubt we will ever have a general purpose >> multitasking OS for 8-bit Apple, this code (after some >> more improvements) can be used as a framework for >> a multithreaded application or even... a game! > > How about once you have made all of the improvements, > and at the end of January, you could simply offer up disk > images of this on your awesome web site. My awesome web site is not going to be around for much longer. People who are interested can email me. Or better still, I can put the images on Asimov, the only archive site that matters. -- ]DF$ Apple II Book: http://macgui.com/newa2guide/ Usenet: http://macgui.com/usenet/ <-- get posts by email! Apple II Web & Blog hosting: http://a2hq.com/
[toc] | [prev] | [next] | [standalone]
| From | Hugh Hood <hughhood@earthlink.net> |
|---|---|
| Date | 2014-12-30 08:03 -0600 |
| Subject | Re: Source Code for Multitasking Mouse Draw Demo v1.3 |
| Message-ID | <D0C80CEE.2CA79%hughhood@earthlink.net> |
| In reply to | #1441 |
David: Your 'Spyglass' is pretty cool. I'll miss it, unless you've got another card up your sleeve that you have yet to play. Hugh Hood in article dog_cow-1419942329@macgui.com, D Finnigan at dog_cow@macgui.com wrote on 12/30/14 6:25 AM: > > My awesome web site is not going to be around for much longer. People who > are interested can email me. Or better still, I can put the images on > Asimov, the only archive site that matters. >
[toc] | [prev] | [next] | [standalone]
| From | D Finnigan <dog_cow@macgui.com> |
|---|---|
| Date | 2014-12-30 16:57 +0000 |
| Subject | Re: Source Code for Multitasking Mouse Draw Demo v1.3 |
| Message-ID | <dog_cow-1419958697@macgui.com> |
| In reply to | #1442 |
Hugh Hood wrote: > David: > > Your 'Spyglass' is pretty cool. I'll miss it, unless you've got another > card > up your sleeve that you have yet to play. > Spyglass: a lot of really great potential not being realized because the Format Converter code behind it is a mess. :-( It was supposed to be a mesh of object-oriented code so tightly arranged that you could click through, for example, a ShrinkIt .SDK file containing a disk image, to a BASIC file on that disk. Or a .PO disk image contaning a .SHK archvie to a hi-res graphics screen. As it stands, you can only go one level deep. This is also the reason why the Apple II search engine project has stalled: the backend Format Converter code is not ready to handle the demands. -- ]DF$ Apple II Book: http://macgui.com/newa2guide/ Usenet: http://macgui.com/usenet/ <-- get posts by email! Apple II Web & Blog hosting: http://a2hq.com/
[toc] | [prev] | [next] | [standalone]
| From | "Bill Garber" <willy46pa@comcast.net> |
|---|---|
| Date | 2014-12-30 11:48 -0500 |
| Subject | Re: Source Code for Multitasking Mouse Draw Demo v1.3 |
| Message-ID | <xv-dnTwxVMzASj_JnZ2dnUVZ8u2dnZ2d@giganews.com> |
| In reply to | #1441 |
"D Finnigan" <dog_cow@macgui.com> wrote in message news:dog_cow-1419942329@macgui.com... > Bill Garber wrote: >> "D Finnigan" <dog_cow@macgui.com> wrote in >> message news:dog_cow-1419931563@macgui.com... >>> gids.rs wrote: >>>>> Look at the code, lines 204-207 in the SEND >>>>> subroutine. It is commented. Source code for >>>>> Updated Super Serial Card IRQ FIFO Buffer >>>> >>>> Now, I just look forward to playing with it. >>> >>> I can send you disk images of this later. >>> Ask me at the end of January. >>> >>> Btw, while I doubt we will ever have a general purpose >>> multitasking OS for 8-bit Apple, this code (after some >>> more improvements) can be used as a framework for >>> a multithreaded application or even... a game! >> >> How about once you have made all of the improvements, >> and at the end of January, you could simply offer up disk >> images of this on your awesome web site. > > My awesome web site is not going to be around for much > longer. People who are interested can email me. Or better > still, I can put the images on Asimov, the only archive site > that matters. Well, I don't hang on your site, but I do frequent it when google sends me a link to it, and I have downloaded from macgui.com more than I have from Asimov, so, I will miss it as well. Bill Garber - I love my C1 D0 D0 CC C5 A0 C9 C9 C7 D3 http://www.sepa-electronics.com
[toc] | [prev] | [next] | [standalone]
| From | Martin Doherty <martindoherty377@gmail.com> |
|---|---|
| Date | 2014-12-30 10:22 -0800 |
| Subject | Re: Source Code for Multitasking Mouse Draw Demo v1.3 |
| Message-ID | <124d1fe8-363c-4beb-b16d-193576e683a3@googlegroups.com> |
| In reply to | #1441 |
> My awesome web site is not going to be around for much longer. Oh noes, macgui.com is going away? When? Why? I'll be sorry to see it go too, I think you've been providing a great resource for both the Mac & Apple II communities. Asimov may be the greatest archive for disk images, but sites like yours offering forum posts, image galleries, and articles are a great complement to bare directories stuffed with inconsistenly-named files. Martin
[toc] | [prev] | [next] | [standalone]
| From | D Finnigan <dog_cow@macgui.com> |
|---|---|
| Date | 2014-12-30 18:55 +0000 |
| Subject | Re: Source Code for Multitasking Mouse Draw Demo v1.3 |
| Message-ID | <dog_cow-1419965765@macgui.com> |
| In reply to | #1449 |
Martin Doherty wrote: >> My awesome web site is not going to be around for much longer. > > Oh noes, macgui.com is going away? When? Why? I'll be sorry to see it go > too, I think you've been providing a great resource for both the Mac & > Apple II communities. Asimov may be the greatest archive for disk images, > but sites like yours offering forum posts, image galleries, and articles > are a great complement to bare directories stuffed with > inconsistenly-named > files. Nothing is final yet. But Mac GUI takes enormous resources to operate, both in terms of my time involvement, and the disk storage and bandwith. Already I economize on that part by not hosting very many PDFs and other large files. Every year until now there has been no question of whether or not the site will continue. It was always "of course it will continue." But now it seems like I will definitely need to downsize the site. What this downsizing will look like, I don't know. But at the current way things are going, it will have to happen some time. Note, however, that I won't be quitting my Apple II hobby! :-) -- ]DF$ Apple II Book: http://macgui.com/newa2guide/ Usenet: http://macgui.com/usenet/ <-- get posts by email! Apple II Web & Blog hosting: http://a2hq.com/
[toc] | [prev] | [next] | [standalone]
| From | Michael J. Mahon <mjmahon@aol.com> |
|---|---|
| Date | 2014-12-30 17:54 -0600 |
| Subject | Re: Source Code for Multitasking Mouse Draw Demo v1.3 |
| Message-ID | <555746199441676034.985190mjmahon-aol.com@news.giganews.com> |
| In reply to | #1450 |
D Finnigan <dog_cow@macgui.com> wrote: > Martin Doherty wrote: >>> My awesome web site is not going to be around for much longer. >> >> Oh noes, macgui.com is going away? When? Why? I'll be sorry to see it go >> too, I think you've been providing a great resource for both the Mac & >> Apple II communities. Asimov may be the greatest archive for disk images, >> but sites like yours offering forum posts, image galleries, and articles >> are a great complement to bare directories stuffed with >> inconsistenly-named >> files. > > Nothing is final yet. But Mac GUI takes enormous resources to operate, both > in terms of my time involvement, and the disk storage and bandwith. Already > I economize on that part by not hosting very many PDFs and other large > files. Every year until now there has been no question of whether or not the > site will continue. It was always "of course it will continue." But now it > seems like I will definitely need to downsize the site. What this downsizing > will look like, I don't know. But at the current way things are going, it > will have to happen some time. > > Note, however, that I won't be quitting my Apple II hobby! :-) Seems strange that disk space is an issue in the era of inexpensive 4TB drives... -- -michael - NadaNet 3.1 and AppleCrate II: http://home.comcast.net/~mjmahon
[toc] | [prev] | [next] | [standalone]
| From | D Finnigan <dog_cow@macgui.com> |
|---|---|
| Date | 2014-12-31 10:31 +0000 |
| Subject | Re: Source Code for Multitasking Mouse Draw Demo v1.3 |
| Message-ID | <dog_cow-1420021931@macgui.com> |
| In reply to | #1451 |
Michael J. Mahon wrote: > > Seems strange that disk space is an issue in the era of inexpensive 4TB > drives... Sad, but true. Everyone's trying to make a profit...
[toc] | [prev] | [next] | [standalone]
Page 1 of 2 [1] 2 Next page →
Back to top | Article view | comp.sys.apple2.programmer
csiph-web