Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.sys.apple2.programmer > #1414

Source Code for Multitasking Mouse Draw Demo v1.3

Path csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!eternal-september.org!feeder.eternal-september.org!mx02.eternal-september.org!.POSTED!not-for-mail
From D Finnigan <dog_cow@macgui.com>
Newsgroups comp.sys.apple2.programmer
Subject Source Code for Multitasking Mouse Draw Demo v1.3
Date Thu, 18 Dec 2014 19:56:49 +0000 (UTC)
Organization A noiseless patient Spider
Lines 1109
Message-ID <dog_cow-multitasking-sourcev1.3-17dec14@macgui.com> (permalink)
References <dog_cow-1418932376@macgui.com>
Injection-Date Thu, 18 Dec 2014 19:56:49 +0000 (UTC)
Injection-Info mx02.eternal-september.org; posting-host="e90d4fdf2805160ea3981f9dc9fde7c9"; logging-data="14877"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18I4RNKLgW4UZA4wzi664pA"
Cancel-Lock sha1:O6aXJp2iU2gY3pRnism8TxA/wlA=
Xref csiph.com comp.sys.apple2.programmer:1414

Show key headers only | View raw


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   

Back to comp.sys.apple2.programmer | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

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

csiph-web