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


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

Multitasking Mouse Draw Demo v1.2

From D. Finnigan <dog_cow@macgui.com>
Newsgroups comp.sys.apple2.programmer
Subject Multitasking Mouse Draw Demo v1.2
Date 2014-06-10 00:52 +0000
Organization bbs-scene usenet news
Message-ID <multitasking-mouse-draw-demo-v1.2-06jun14@macgui.com> (permalink)

Show all headers | View raw


Multitasking Mouse Draw Demo v1.2 - 06 June 2014
by D. Finnigan

The source code is in the public domain for the benefit of all
Apple II users. I claim absolutely no copyright on the source code.


The assembler used is Merlin.



                1    KBD      EQU   $C000      
                2    KBDSTRB  EQU   $C010      
                3    SPKR     EQU   $C030      
                4    PRBYTE   EQU   $FDDA      
                5    PRNTAX   EQU   $F941      
                6    DOSWARM  EQU   $3D0       
                7    IRQLOC   EQU   $3FE       
                8    COUT     EQU   $FDED      
                9    VBLINT   EQU   $09        
                10   MOUIDLOC1 EQU  $05        ; LOCATIONS OF MOUSE ID BYTES 
                11   MOUIDLOC2 EQU  $07        
                12   MOUIDLOC3 EQU  $0B        
                13   MOUIDLOC4 EQU  $0C        
                14   MOUIDLOC5 EQU  $FB        
                15   MOUID1   EQU   $38        ; MOUSE ID BYTES 
                16   MOUID2   EQU   $18        
                17   MOUID3   EQU   $01        
                18   MOUID4   EQU   $20        
                19   MOUID5   EQU   $D6        
                20   BASEADDR EQU   $06        ; 2-BYTES FOR INDEXED ADDRESSING 
                21   MOUSLOT  EQU   $08        ; MOUSE CARD SLOT 
                22   CTR      EQU   $09        ; IRQ COUNTER 
                23   ACT      EQU   $19        ; ACTIVE PROCESS 
                24   NEWPROCTMP EQU $0A        ; TEMP HOLDER FOR NEW PROCESS ID 
                25   MAXP     EQU   $06        ; MAXIMUM NUMBER OF PROCESSES 
                26   MOUXPOS  EQU   $1A        ; 2 BYTES FOR MOUSE X-POSITION 
                27   MOUYPOS  EQU   $1C        
                28   MOUSTAT  EQU   $1E        
                29   * 
                30   PFREE    EQU   $FF        ; PROCESS SLOT FREE - CHANGE WITH CARE 
                31   PRUN     EQU   $01        ; RUNNING PROCESS 
                32   PZOMB    EQU   $02        ; ZOMBIE PROCESS 
                33   PSLEEP   EQU   $03        ; SLEEPING PROCESS 
                34   * 
                35   CLRTOP   EQU   $F836      
                36   SETCOL   EQU   $F864      
                37   PLOT     EQU   $F800      
                38   SCRN     EQU   $F871      
                39   GR       EQU   $C050      
                40   MIX      EQU   $C053      
                41   RED      EQU   $01        
                42   BLUE     EQU   $02        
                43   BLACK    EQU   $00        
                44   WHITE    EQU   $0F        
                45   * 
8000: A9 9B     46            LDA   #$9B       
8002: 20 ED FD  47            JSR   COUT       
8005: A9 91     48            LDA   #$91       ; KILL 80-COLS FIRMWARE 
8007: 20 ED FD  49            JSR   COUT       
800A: A2 14     50            LDX   #$14       
800C: 86 22     51            STX   $22        ; TOP OF TEXT WINDOW 
800E: CA        52            DEX              
800F: 86 25     53            STX   $25        
                54   * 
8011: A9 00     55   FINDMOUSE LDA  #$00       
8013: 85 06     56            STA   BASEADDR   
8015: A9 C8     57            LDA   #$C8       
8017: 85 07     58            STA   BASEADDR+1 
 
 
                              ===== Page 2 ===== 
 
8019: A2 08     59            LDX   #$08       
801B: CA        60   :LOOP1   DEX              
801C: F0 42     61            BEQ   :NOMOUSE   
801E: C6 07     62            DEC   BASEADDR+1 
8020: A0 05     63            LDY   #MOUIDLOC1 
8022: B1 06     64            LDA   (BASEADDR),Y 
8024: C9 38     65            CMP   #MOUID1    
8026: D0 F3     66            BNE   :LOOP1     
8028: A0 07     67            LDY   #MOUIDLOC2 
802A: B1 06     68            LDA   (BASEADDR),Y 
802C: C9 18     69            CMP   #MOUID2    
802E: D0 EB     70            BNE   :LOOP1     
8030: A0 0B     71            LDY   #MOUIDLOC3 
8032: B1 06     72            LDA   (BASEADDR),Y 
8034: C9 01     73            CMP   #MOUID3    
8036: D0 E3     74            BNE   :LOOP1     
8038: A0 0C     75            LDY   #MOUIDLOC4 
803A: B1 06     76            LDA   (BASEADDR),Y 
803C: C9 20     77            CMP   #MOUID4    
803E: D0 DB     78            BNE   :LOOP1     
8040: A0 FB     79            LDY   #MOUIDLOC5 
8042: B1 06     80            LDA   (BASEADDR),Y 
8044: C9 D6     81            CMP   #MOUID5    
8046: D0 D3     82            BNE   :LOOP1     
8048: 8A        83            TXA              
8049: 0A        84            ASL              
804A: 0A        85            ASL              
804B: 0A        86            ASL              
804C: 0A        87            ASL              
804D: 85 08     88            STA   MOUSLOT    
804F: A9 8D     89            LDA   #$8D       
8051: 20 ED FD  90            JSR   COUT       
8054: 8A        91            TXA              
8055: 20 DA FD  92            JSR   PRBYTE     
8058: A9 8D     93            LDA   #$8D       
805A: 20 ED FD  94            JSR   COUT       
805D: 4C 7B 80  95            JMP   SYSINIT    ; SYSTEM INITIALIZATION 
8060: A0 00     96   :NOMOUSE LDY   #$00       
8062: B9 70 80  97   :LOOP    LDA   NOMOUMSG,Y 
8065: F0 06     98            BEQ   :DONE      
8067: 20 ED FD  99            JSR   COUT       
806A: C8        100           INY              
806B: D0 F5     101           BNE   :LOOP      
806D: 4C D0 03  102  :DONE    JMP   DOSWARM    
8070: 8D CE CF  103  NOMOUMSG HEX   8DCECFA0CDCFD5D3C58D00 
8073: A0 CD CF D5 D3 C5 8D 00 
                104  * 
807B: 58        105  SYSINIT  CLI              ; CREATE INITIAL PROCESS 0 
807C: 08        106           PHP              
807D: 78        107           SEI              
807E: A9 FF     108           LDA   #PFREE     
8080: 8D BE 82  109           STA   STKTAB     
8083: 85 19     110           STA   ACT        
8085: A0 05     111           LDY   #MAXP-1    ; CLEAR PROCESS TABLES 
8087: 99 D7 82  112  :L1      STA   PSTATTAB,Y 
808A: 99 DD 82  113           STA   ESTATTAB,Y 
808D: 99 D1 82  114           STA   PPIDTAB,Y  
 
 
                              ===== Page 3 ===== 
 
8090: 88        115           DEY              
8091: 10 F4     116           BPL   :L1        
8093: A0 16     117           LDY   #$16       ; PRIORITY IN Y-REG 
8095: A9 9D     118           LDA   #<PROC0    
8097: A2 83     119           LDX   #>PROC0    
8099: 20 A3 80  120           JSR   NEWPROC    
809C: 20 0C 81  121           JSR   VBLON      ; ENABLE MOUSE CARD VBL INTERRUPTS 
809F: 28        122           PLP              ; ENABLE IRQ 
80A0: 4C A0 80  123  :IDLE    JMP   :IDLE      
                124  * 
                125  * CREATE A NEW PROCESS IN THE SYSTEM 
                126  * THIS MUST BE CALLED DIRECTLY UNTIL FORK AND EXEC 
                127  * CALLS ARE ADDED. 
                128  * Y-REG = PROCESS PRIORITY 
                129  * A-REG = LOW BYTE OF STARTING ADDRESS 
                130  * X-REG = HIGH BYTE OF "" "" 
                131  * 
                132  * RETURNS WITH NEW PROCESS ID IN Y-REG 
                133  * 
80A3: 08        134  NEWPROC  PHP              
80A4: 78        135           SEI              
80A5: 48        136           PHA              
80A6: 8A        137           TXA              
80A7: 48        138           PHA              
80A8: 98        139           TYA              
80A9: 48        140           PHA              
80AA: A0 00     141           LDY   #$00       ; FIND A FREE PROCESS ID 
80AC: B9 D7 82  142  :L1      LDA   PSTATTAB,Y ; CHECK PROCESS STATUS 
80AF: C9 FF     143           CMP   #PFREE     ; IS IT FREE? 
80B1: F0 08     144           BEQ   :FREE      ; YES! 
80B3: C8        145           INY              ; NO, SO MOVE ON TO NEXT ONE 
80B4: C0 06     146           CPY   #MAXP      ; REACHED OUR LIMIT? 
80B6: D0 F4     147           BNE   :L1        ; NO, SO CARRY ON 
80B8: 38        148           SEC              ; ERROR, NO FREE PROCESS SLOTS 
80B9: B0 50     149           BCS   :DONE      ; EXIT WITH ERROR CONDITION 
80BB: EE BE 82  150  :FREE    INC   STKTAB     ; INCREMENT PROCESS COUNT 
80BE: 84 0A     151           STY   NEWPROCTMP 
80C0: F0 0F     152           BEQ   :TSX       ; OFFSET FROM CURRENT SP 
80C2: 88        153           DEY              ; OFFSET FROM LAST PROC SP 
80C3: C4 19     154           CPY   ACT        ; CURRENT PROCESS? 
80C5: F0 0A     155           BEQ   :TSX       
80C7: BE BF 82  156           LDX   STKTAB+1,Y 
80CA: 8A        157           TXA              
80CB: 38        158           SEC              
80CC: E9 20     159           SBC   #$20       ; NEW PROC SP 
80CE: C8        160           INY              
80CF: D0 07     161           BNE   :STORSP    
80D1: BA        162  :TSX     TSX              
80D2: 8A        163           TXA              
80D3: 38        164           SEC              
80D4: E9 20     165           SBC   #$20       
80D6: A4 0A     166           LDY   NEWPROCTMP ; RELOAD NEW PROCESS ID 
80D8: AA        167  :STORSP  TAX              
80D9: 99 BF 82  168           STA   STKTAB+1,Y 
80DC: 68        169           PLA              ; PROCESS PRIORITY 
80DD: 99 C5 82  170           STA   PRIOTAB,Y  
 
 
                              ===== Page 4 ===== 
 
80E0: 68        171           PLA              ; HI-BYTE OF START ADDR 
80E1: 9D 00 01  172           STA   $0100,X    
80E4: CA        173           DEX              
80E5: 68        174           PLA              ; LO-BYTE OF START ADDR 
80E6: 9D 00 01  175           STA   $0100,X    
80E9: A9 00     176           LDA   #$00       ; INITIAL PROCESSOR STATUS 
80EB: CA        177           DEX              
80EC: 9D 00 01  178           STA   $0100,X    
80EF: CA        179           DEX              
80F0: 9D 00 01  180           STA   $0100,X    ; INITIAL REGISTERS 
80F3: CA        181           DEX              
80F4: 9D 00 01  182           STA   $0100,X    
80F7: CA        183           DEX              
80F8: 9D 00 01  184           STA   $0100,X    
80FB: CA        185           DEX              
80FC: 8A        186           TXA              
80FD: 99 BF 82  187           STA   STKTAB+1,Y 
8100: A5 19     188           LDA   ACT        ; GET PARENT PROCESS ID 
8102: 99 D1 82  189           STA   PPIDTAB,Y  ; STORE IN PPID TABLE 
8105: A9 01     190           LDA   #PRUN      ; PROCESS STATUS 
8107: 99 D7 82  191           STA   PSTATTAB,Y 
810A: 28        192           PLP              
810B: 60        193  :DONE    RTS              
                194  * 
810C: A9 01     195  VBLON    LDA   #$01       
810E: 20 30 81  196           JSR   SETMOUSE   
8111: 20 24 81  197           JSR   INITMOUSE  
8114: A9 32     198           LDA   #<IRQ      
8116: 8D FE 03  199           STA   IRQLOC     
8119: A9 82     200           LDA   #>IRQ      
811B: 8D FF 03  201           STA   IRQLOC+1   
811E: A9 09     202           LDA   #VBLINT    
8120: 20 30 81  203           JSR   SETMOUSE   ; TURN ON MOUSE VBL INTERRUPTS 
8123: 60        204           RTS              
                205  * 
8124: A0 19     206  INITMOUSE LDY  #$19       
8126: A9 00     207           LDA   #$00       
8128: 85 06     208           STA   BASEADDR   
812A: B1 06     209           LDA   (BASEADDR),Y 
812C: 85 06     210           STA   BASEADDR   
812E: D0 3E     211           BNE   MOUSEJMP   
                212  * 
8130: A0 12     213  SETMOUSE LDY   #$12       
8132: AA        214           TAX              
8133: A9 00     215           LDA   #$00       
8135: 85 06     216           STA   BASEADDR   
8137: B1 06     217           LDA   (BASEADDR),Y 
8139: 85 06     218           STA   BASEADDR   
813B: 8A        219           TXA              
813C: 10 30     220           BPL   MOUSEJMP   
                221  * 
813E: A0 13     222  SERVEMOUSE LDY #$13       
8140: A9 00     223           LDA   #$00       
8142: 85 06     224           STA   BASEADDR   
8144: B1 06     225           LDA   (BASEADDR),Y 
8146: 85 06     226           STA   BASEADDR   
8148: D0 24     227           BNE   MOUSEJMP   
 
 
                              ===== Page 5 ===== 
 
                228  * 
814A: AA        229  CLAMPMOUSE TAX            
814B: A0 17     230           LDY   #$17       
814D: A9 00     231           LDA   #$00       
814F: 85 06     232           STA   BASEADDR   
8151: B1 06     233           LDA   (BASEADDR),Y 
8153: 85 06     234           STA   BASEADDR   
8155: 8A        235           TXA              
8156: 10 16     236           BPL   MOUSEJMP   
                237  * 
8158: A0 18     238  HOMEMOUSE LDY  #$18       
815A: A9 00     239           LDA   #$00       
815C: 85 06     240           STA   BASEADDR   
815E: B1 06     241           LDA   (BASEADDR),Y 
8160: 85 06     242           STA   BASEADDR   
8162: D0 0A     243           BNE   MOUSEJMP   
                244  * 
8164: A0 14     245  READMOUSE LDY  #$14       
8166: A9 00     246           LDA   #$00       
8168: 85 06     247           STA   BASEADDR   
816A: B1 06     248           LDA   (BASEADDR),Y 
816C: 85 06     249           STA   BASEADDR   
                250  * 
816E: A6 07     251  MOUSEJMP LDX   BASEADDR+1 
8170: A4 08     252           LDY   MOUSLOT    
8172: 6C 06 00  253           JMP   (BASEADDR) 
                254  * 
                255  * TERMINATE A PROCESS AND RETURN A STATUS CODE 
                256  * TO THE PARENT PROCESS 
                257  * A-REG HOLDS THE STATUS CODE 
                258  * 
8175: A4 19     259  EXIT     LDY   ACT        ; GET PROCESS ID 
8177: 99 DD 82  260           STA   ESTATTAB,Y ; STORE EXIT STATUS 
817A: A9 02     261           LDA   #PZOMB     
817C: 99 D7 82  262           STA   PSTATTAB,Y ; BECOME A ZOMBIE 
817F: A2 00     263           LDX   #$00       ; USED AS ANY CHILD FOUND FLAG 
8181: A4 19     264  :L0      LDY   ACT        ; SEARCH PROCESS TABLE FOR OUR PARENT 
8183: B9 D1 82  265           LDA   PPIDTAB,Y  ; GET OUR PARENT PROCESS ID 
8186: C9 FF     266           CMP   #PFREE     ; CHECK IF THE PROCESS STILL EXISTS 
8188: F0 22     267           BEQ   :NOPARENT  ; NO PARENT PROCESS 
818A: 98        268  :PARENT  TYA              ; FOUND PARENT; SAVE ITS PID 
818B: 48        269           PHA              
818C: A0 01     270           LDY   #$01       ; PROCESS 1 (INIT) 
818E: 20 EF 81  271           JSR   WAKEUP     
8191: 68        272           PLA              
8192: A8        273           TAY              ; RESTORE SAVED PID 
8193: 20 EF 81  274           JSR   WAKEUP     ; NOW WAKE UP THE PARENT PROCESS 
                275  * SEARCH FOR CHILDREN 
8196: A0 00     276           LDY   #$00       ; INITIALIZE PROCESS ID FOR LOOP 
8198: B9 D1 82  277  :CL1     LDA   PPIDTAB,Y  ; GET THE PARENT PROCESS ID 
819B: C5 19     278           CMP   ACT        ; IS IT OUR PROCESS ID? 
819D: D0 05     279           BNE   :CNEXT     ; NO, SO MOVE ON 
819F: A9 01     280           LDA   #$01       ; NEW PARENT PID IS 1 (INIT) 
81A1: 99 D1 82  281           STA   PPIDTAB,Y  ; SET THE NEW PPID 
                282  * TODO: CHECK FOR STOPPED PROCESS 
 
 
                              ===== Page 6 ===== 
 
81A4: C8        283  :CNEXT   INY              ; POINT TO NEXT PROCESS ID 
81A5: C9 06     284           CMP   #MAXP      ; AT PROCESS LIMIT? 
81A7: D0 EF     285           BNE   :CL1       ; NO, SO CONTINUE 
81A9: 4C 73 82  286           JMP   RESETCTR   ; RUN NEXT PROCESS 
81AC: A9 01     287  :NOPARENT LDA  #$01       ; PARENT IS NOW PID 1 (INIT) 
81AE: 99 D1 82  288           STA   PPIDTAB,Y  ; UPDATE OUR PROCESS PARENT 
81B1: D0 CE     289           BNE   :L0        ; DO THE PARENT CHECK AGAIN (ALWAYS TAKEN) 
                290  * 
                291  * WAIT FOREVER FOR A CHILD PROCESS TO TERMINATE 
                292  * AND COLLECT ITS TERMINATION STATUS 
                293  * A-REG = TERMINATION STATUS 
                294  * Y-REG = CHILD PROCESS ID 
                295  * CARRY SET = ERROR: NO CHILD PROCESSES EXIST 
                296  * 
81B3: A2 00     297  WAIT     LDX   #$00       ; USED AS ANY CHILD FOUND FLAG 
81B5: A0 00     298  :L1      LDY   #00        ; SEARCH PROCESS TABLE FOR OUR CHILDREN 
81B7: B9 D1 82  299  :L2      LDA   PPIDTAB,Y  ; GET CHILD STATUS 
81BA: C5 19     300           CMP   ACT        ; OUR CHILD? 
81BC: D0 08     301           BNE   :NEXT      ; NO 
81BE: E8        302           INX              ; FOUND AT LEAST ONE CHILD 
81BF: B9 D7 82  303           LDA   PSTATTAB,Y ; GET PROCESS STATUS 
81C2: C9 02     304           CMP   #PZOMB     ; IS A ZOMBIE? 
81C4: F0 10     305           BEQ   :COLL      ; YES, SO COLLECT STATUS 
81C6: C8        306  :NEXT    INY              
81C7: C0 06     307           CPY   #MAXP      ; SEARCHED THE ENTIRE PROCESS TABLE? 
81C9: D0 EC     308           BNE   :L2        
81CB: 8A        309           TXA              ; CHECK OUR CHILD FLAG 
81CC: F0 1D     310           BEQ   :NOCHILD   ; NO CHILDREN, SO RETURN ERROR 
81CE: A0 7F     311           LDY   #$7F       ; SLEEP TIME 
81D0: 20 00 82  312           JSR   SLEEP      ; GO TO SLEEP 
81D3: 4C B5 81  313           JMP   :L1        ; LOOK FOR CHILDREN AGAIN 
81D6: B9 DD 82  314  :COLL    LDA   ESTATTAB,Y ; EXIT STATUS OF CHILD PROCESS 
81D9: 48        315           PHA              
81DA: A9 FF     316           LDA   #PFREE     ; CLEAR PROCESS SLOT 
81DC: 99 D7 82  317           STA   PSTATTAB,Y 
81DF: 99 D1 82  318           STA   PPIDTAB,Y  
81E2: 99 DD 82  319           STA   ESTATTAB,Y 
81E5: CE BE 82  320           DEC   STKTAB     ; DECREMENT PROCESS COUNT 
81E8: 68        321           PLA              ; GET EXIT STATUS BACK 
81E9: 18        322           CLC              ; NO ERROR 
81EA: 60        323           RTS              
81EB: 68        324  :NOCHILD PLA              
81EC: AA        325           TAX              
81ED: 38        326           SEC              ; ERROR FLAG 
81EE: 60        327           RTS              
                328  * 
                329  * FORCIBLY WAKE A SLEEPING PROCESS 
                330  * IF PROCESS IS NOT ASLEEP, NOTHING HAPPENS 
                331  * Y-REG HOLDS PROCESS ID 
                332  * 
81EF: C0 06     333  WAKEUP   CPY   #MAXP      
81F1: F0 0C     334           BEQ   :DONE      ; OVER LIMIT 
81F3: B9 D7 82  335           LDA   PSTATTAB,Y ; GET PROCESS STATUS 
81F6: C9 03     336           CMP   #PSLEEP    ; IS IT SLEEPING? 
 
 
                              ===== Page 7 ===== 
 
81F8: D0 05     337           BNE   :DONE      ; NO, SO EXIT NOW 
81FA: A9 01     338           LDA   #PRUN      ; RUN STATUS 
81FC: 99 D7 82  339           STA   PSTATTAB,Y ; SET NEW STATUS 
81FF: 60        340  :DONE    RTS              
                341  * 
                342  * PUT A PROCESS TO SLEEP FOR A TIME 
                343  * Y-REG HOLDS SLEEPING TIME 
                344  * 
8200: 08        345  SLEEP    PHP              
8201: 78        346           SEI              
8202: 48        347           PHA              
8203: 8A        348           TXA              
8204: 48        349           PHA              
8205: 98        350           TYA              
8206: 48        351           PHA              
8207: A4 19     352           LDY   ACT        
8209: BA        353           TSX              
820A: E8        354           INX              
820B: E8        355           INX              
820C: E8        356           INX              
820D: BD 00 01  357           LDA   $0100,X    
8210: 99 CB 82  358           STA   SLPTAB,Y   ; STORE SLEEP DURATION 
8213: A9 03     359           LDA   #PSLEEP    
8215: 99 D7 82  360           STA   PSTATTAB,Y ; SET PROCESS STATUS TO SLEEPING 
8218: D0 07     361           BNE   YIELD2     ; ALWAYS TAKEN 
                362  * 
                363  * GIVE UP REMAINING CPU TIME FOR THIS PROCESS 
                364  * 
821A: 08        365  YIELD    PHP              
821B: 78        366           SEI              
821C: 48        367           PHA              
821D: 8A        368           TXA              
821E: 48        369           PHA              
821F: 98        370           TYA              
8220: 48        371           PHA              
8221: BA        372  YIELD2   TSX              ; FIX JSR RETURN FOR RTI 
8222: 8A        373           TXA              
8223: 18        374           CLC              
8224: 69 05     375           ADC   #$05       
8226: AA        376           TAX              
8227: FE 00 01  377           INC   $0100,X    
822A: D0 47     378           BNE   RESETCTR   
822C: E8        379           INX              
822D: FE 00 01  380           INC   $0100,X    
8230: D0 41     381           BNE   RESETCTR   
                382  * 
                383  * THE MAIN INTERRUPT HANDLER 
                384  * 
8232: A5 45     385  IRQ      LDA   $45        
8234: 48        386           PHA              
8235: 8A        387           TXA              
8236: 48        388           PHA              
8237: 98        389           TYA              
8238: 48        390           PHA              
8239: 20 3E 81  391           JSR   SERVEMOUSE 
823C: B0 7A     392           BCS   IRQDONE    
823E: 20 64 81  393           JSR   READMOUSE  
 
 
                              ===== Page 8 ===== 
 
8241: A5 07     394           LDA   BASEADDR+1 
8243: 29 0F     395           AND   #$F        
8245: AA        396           TAX              
8246: BD 78 04  397           LDA   $478,X     
8249: 85 1A     398           STA   MOUXPOS    
824B: BD F8 04  399           LDA   $4F8,X     
824E: 85 1C     400           STA   MOUYPOS    
8250: BD 78 05  401           LDA   $578,X     
8253: 85 1B     402           STA   MOUXPOS+1  
8255: BD F8 05  403           LDA   $5F8,X     
8258: 85 1D     404           STA   MOUYPOS+1  
825A: BD 78 07  405           LDA   $778,X     
825D: 85 1E     406           STA   MOUSTAT    
825F: A4 19     407           LDY   ACT        ; CURRENT PROCESS ID 
8261: 30 1B     408           BMI   IRQNEXT    ; BOOTSTRAP INITIAL PROCESS 
8263: AD BE 82  409           LDA   STKTAB     ; RUNNING PROCESS COUNT 
8266: F0 50     410           BEQ   IRQDONE    ; ONLY 1 PROCESS 
8268: A5 09     411  :CTR     LDA   CTR        
826A: D9 C5 82  412           CMP   PRIOTAB,Y  ; HAS PROCESS REACHED ITS TIME LIMIT? 
826D: F0 04     413           BEQ   RESETCTR   ; YES, SO PREPARE TO SWITCH 
826F: E6 09     414           INC   CTR        
8271: D0 45     415           BNE   IRQDONE    ; PROCESS NOT SWITCHED 
8273: A9 00     416  RESETCTR LDA   #$00       
8275: 85 09     417           STA   CTR        
8277: A4 19     418           LDY   ACT        
8279: BA        419           TSX              
827A: 8A        420           TXA              
827B: 99 BF 82  421           STA   STKTAB+1,Y 
827E: C8        422  IRQNEXT  INY              ; SWITCH TO NEXT PROCESS 
827F: C0 06     423           CPY   #MAXP      
8281: F0 13     424           BEQ   :L2        ; GO BACK TO START OF PROCESS TABLE 
8283: B9 D7 82  425  :L1      LDA   PSTATTAB,Y ; GET PRCESS STATUS 
8286: C9 01     426           CMP   #PRUN      ; IS THIS A RUNNABLE PROCESS? 
8288: F0 22     427           BEQ   :CTXSW     ; YES, SO SWITCH IT IN 
828A: C9 FF     428           CMP   #PFREE     ; IS THIS PROCESS SLOT ACTIVE? 
828C: F0 F0     429           BEQ   IRQNEXT    ; YES, SO SKIP IT 
828E: C9 03     430           CMP   #PSLEEP    ; IS PROCESS ASLEEP? 
8290: F0 08     431           BEQ   :SLEEP     ; YES, SO DECREMENT ITS SLEEP TIMER 
8292: C9 02     432           CMP   #PZOMB     ; IS THIS PROCESS A ZOMBIE? 
8294: F0 E8     433           BEQ   IRQNEXT    ; YES, SO SKIP IT 
8296: A0 00     434  :L2      LDY   #$00       ; LOOP BACK TO PROCESS 0 
8298: F0 E9     435           BEQ   :L1        ; ALWAYS TAKEN 
829A: B9 CB 82  436  :SLEEP   LDA   SLPTAB,Y   
829D: F0 0D     437           BEQ   :CTXSW     ; PROCESS IS NOT ASLEEP 
829F: AA        438           TAX              
82A0: CA        439           DEX              
82A1: 8A        440           TXA              
82A2: 99 CB 82  441           STA   SLPTAB,Y   
82A5: D0 D7     442           BNE   IRQNEXT    ; PROCESS STILL HAS SLEEP TIME 
82A7: A9 01     443           LDA   #PRUN      ; PROCESS IS NOW RUNNABLE 
82A9: 99 D7 82  444           STA   PSTATTAB,Y ; SET THIS NEW STATUS 
82AC: BE BF 82  445  :CTXSW   LDX   STKTAB+1,Y 
82AF: 9A        446           TXS              ; RESTORE THE PROCESS STACK POINTER 
 
 
                              ===== Page 9 ===== 
 
82B0: 84 19     447           STY   ACT        ; ACTIVE PROCESS ID 
82B2: AD 30 C0  448           LDA   SPKR       
82B5: AD 30 C0  449           LDA   SPKR       
82B8: 68        450  IRQDONE  PLA              
82B9: A8        451           TAY              
82BA: 68        452           PLA              
82BB: AA        453           TAX              
82BC: 68        454           PLA              
82BD: 40        455           RTI              
                456  * 
82BE: 00 00 00  457  STKTAB   DS    MAXP+1     
82C1: 00 00 00 00 
82C5: 00 00 00  458  PRIOTAB  DS    MAXP       ; PROCESS PRIORITIES TABLE 
82C8: 00 00 00 
82CB: 00 00 00  459  SLPTAB   DS    MAXP       ; SLEEPING PROCESSES TABLE 
82CE: 00 00 00 
82D1: 00 00 00  460  PPIDTAB  DS    MAXP       ; PARENT PROCESS ID TABLE 
82D4: 00 00 00 
82D7: 00 00 00  461  PSTATTAB DS    MAXP       ; PROCESS STATUS TABLE 
82DA: 00 00 00 
82DD: 00 00 00  462  ESTATTAB DS    MAXP       ; PROCESS EXIT STATUS TABLE 
82E0: 00 00 00 
                463  * 
82E3: 2C 10 C0  464  PROC4    BIT   KBDSTRB    
82E6: A0 00     465           LDY   #$00       
82E8: A2 00     466           LDX   #$00       
82EA: 8A        467  :L1      TXA              
82EB: 08        468           PHP              
82EC: 78        469           SEI              
82ED: 20 71 F8  470           JSR   SCRN       
82F0: 28        471           PLP              
82F1: 48        472           PHA              
82F2: 68        473           PLA              
82F3: C9 0F     474           CMP   #WHITE     
82F5: D0 0C     475           BNE   :L2        
82F7: A9 00     476           LDA   #BLACK     
82F9: 08        477           PHP              
82FA: 78        478           SEI              
82FB: 20 64 F8  479           JSR   SETCOL     
82FE: 8A        480           TXA              ; VERTICAL POSITION IN A-REG 
82FF: 20 00 F8  481           JSR   PLOT       
8302: 28        482           PLP              
8303: C8        483  :L2      INY              
8304: C0 28     484           CPY   #$28       
8306: D0 E2     485           BNE   :L1        
8308: A0 00     486           LDY   #$00       
830A: E8        487           INX              
830B: E0 28     488           CPX   #$28       
830D: D0 DB     489           BNE   :L1        
830F: A0 00     490           LDY   #$00       
8311: B9 26 83  491  :MSGL    LDA   CLRMSG,Y   
8314: F0 0B     492           BEQ   :MSGDONE   
8316: 09 80     493           ORA   #$80       
8318: 08        494           PHP              
8319: 78        495           SEI              
831A: 20 ED FD  496           JSR   COUT       
831D: 28        497           PLP              
 
 
                              ===== Page 10 ===== 
 
831E: C8        498           INY              
831F: D0 F0     499           BNE   :MSGL      
8321: A9 01     500  :MSGDONE LDA   #$01       ; EXIT CODE 
8323: 20 75 81  501           JSR   EXIT       ; TERMINATE THIS PROCESS 
8326: 43 4C 45  502  CLRMSG   ASC   B4CLEARB4 
8329: 41 52 
832B: 8D 00     503           HEX   8D00       
832D: A5 1E     504  PROC3    LDA   MOUSTAT    
832F: 10 17     505           BPL   :NEXT      
8331: A5 1A     506           LDA   MOUXPOS    
8333: 08        507           PHP              
8334: 78        508           SEI              
8335: 20 DA FD  509           JSR   PRBYTE     
8338: A9 A0     510           LDA   #$A0       
833A: 20 ED FD  511           JSR   COUT       
833D: A5 1C     512           LDA   MOUYPOS    
833F: 20 DA FD  513           JSR   PRBYTE     
8342: A9 8D     514           LDA   #$8D       
8344: 20 ED FD  515           JSR   COUT       
8347: 28        516           PLP              
8348: 20 1A 82  517  :NEXT    JSR   YIELD      
834B: 4C 2D 83  518           JMP   PROC3      
                519  * 
834E: A2 27     520  PROC2    LDX   #$27       
8350: A0 27     521           LDY   #$27       
8352: A9 03     522           LDA   #$03       
8354: 20 00 82  523           JSR   SLEEP      
8357: 08        524  :L1      PHP              
8358: 78        525           SEI              
8359: A9 02     526           LDA   #BLUE      
835B: 20 64 F8  527           JSR   SETCOL     
835E: 8A        528           TXA              
835F: 20 00 F8  529           JSR   PLOT       
8362: 28        530           PLP              
8363: 20 1A 82  531           JSR   YIELD      
8366: 88        532           DEY              
8367: 10 EE     533           BPL   :L1        
8369: A0 27     534           LDY   #$27       
836B: CA        535           DEX              
836C: 10 E9     536           BPL   :L1        
836E: A2 27     537           LDX   #$27       
8370: D0 E5     538           BNE   :L1        
                539  * 
8372: A0 00     540  PROC1    LDY   #$00       
8374: A2 00     541           LDX   #$00       
8376: 08        542  :L1      PHP              
8377: 78        543           SEI              
8378: A9 01     544           LDA   #RED       
837A: 20 64 F8  545           JSR   SETCOL     
837D: 8A        546           TXA              
837E: 20 00 F8  547           JSR   PLOT       
8381: 28        548           PLP              
8382: 20 1A 82  549           JSR   YIELD      
8385: C8        550           INY              
8386: C0 28     551           CPY   #$28       
8388: D0 EC     552           BNE   :L1        
838A: A0 00     553           LDY   #$00       
 
 
                              ===== Page 11 ===== 
 
838C: A9 07     554           LDA   #$07       
838E: 20 00 82  555           JSR   SLEEP      
8391: E8        556           INX              
8392: E0 28     557           CPX   #$28       
8394: D0 E0     558           BNE   :L1        
8396: A2 00     559           LDX   #$00       
8398: F0 DC     560           BEQ   :L1        
839A: 4C 72 83  561           JMP   PROC1      
                562  * 
839D: 08        563  PROC0    PHP              
839E: 78        564           SEI              
839F: A9 00     565           LDA   #$00       
83A1: A2 27     566           LDX   #$27       ; MAX X CLAMP 
83A3: 8D 78 04  567           STA   $478       
83A6: 8E F8 04  568           STX   $4F8       
83A9: 8D 78 05  569           STA   $578       
83AC: 8D F8 05  570           STA   $5F8       
83AF: 20 4A 81  571           JSR   CLAMPMOUSE 
83B2: A0 00     572           LDY   #$00       
83B4: A9 01     573           LDA   #$01       
83B6: A2 27     574           LDX   #$27       
83B8: 8C 78 04  575           STY   $478       
83BB: 8E F8 04  576           STX   $4F8       
83BE: 8C 78 05  577           STY   $578       
83C1: 8C F8 05  578           STY   $5F8       
83C4: 20 4A 81  579           JSR   CLAMPMOUSE 
83C7: 20 58 81  580           JSR   HOMEMOUSE  
83CA: 28        581           PLP              
83CB: AD 53 C0  582           LDA   MIX        
83CE: AD 50 C0  583           LDA   GR         
83D1: 08        584           PHP              
83D2: 78        585           SEI              
83D3: 20 36 F8  586           JSR   CLRTOP     
83D6: 28        587           PLP              
83D7: A0 0B     588           LDY   #$0B       ; PROCESS PRIORITY 
83D9: A9 72     589           LDA   #<PROC1    
83DB: A2 83     590           LDX   #>PROC1    
83DD: 20 A3 80  591           JSR   NEWPROC    
83E0: A0 06     592           LDY   #$06       
83E2: A9 4E     593           LDA   #<PROC2    
83E4: A2 83     594           LDX   #>PROC2    
83E6: 20 A3 80  595           JSR   NEWPROC    
83E9: A0 0B     596           LDY   #$0B       
83EB: A9 2D     597           LDA   #<PROC3    
83ED: A2 83     598           LDX   #>PROC3    
83EF: 20 A3 80  599           JSR   NEWPROC    
83F2: 2C 00 C0  600  :NEXT    BIT   KBD        
83F5: 30 16     601           BMI   :CLRIT     
83F7: 08        602           PHP              
83F8: 78        603           SEI              
83F9: A5 1E     604           LDA   MOUSTAT    ; CHECK BUTTON STATUS 
83FB: 10 0C     605           BPL   :PULL      
83FD: A9 0F     606           LDA   #WHITE     
83FF: 20 64 F8  607           JSR   SETCOL     
8402: A5 1C     608           LDA   MOUYPOS    
8404: A4 1A     609           LDY   MOUXPOS    
8406: 20 00 F8  610           JSR   PLOT       
 
 
                              ===== Page 12 ===== 
 
8409: 28        611  :PULL    PLP              
840A: 4C F2 83  612           JMP   :NEXT      
840D: A0 04     613  :CLRIT   LDY   #$04       ; PROCESS PRIORITY 
840F: A9 E3     614           LDA   #<PROC4    
8411: A2 82     615           LDX   #>PROC4    
8413: 20 A3 80  616           JSR   NEWPROC    ; SPAWN THE CHILD PROCESS 
8416: 20 B3 81  617           JSR   WAIT       ; AND WAIT FOR IT TO COMPLETE 
8419: 08        618           PHP              
841A: 78        619           SEI              
841B: AA        620           TAX              ; MOVE TERM STATUS TO X-REG 
841C: 98        621           TYA              ; MOVE PROC ID TO A-REG 
841D: 20 41 F9  622           JSR   PRNTAX     
8420: A9 8D     623           LDA   #$8D       
8422: 20 ED FD  624           JSR   COUT       
8425: 28        625           PLP              
8426: 4C F2 83  626           JMP   :NEXT      
--End assembly, 1065 bytes, Errors: 0 
Symbol table - alphabetical order: 
   ACT     =$19        BASEADDR=$06        BLACK   =$00        BLUE    =$02 
   CLAMPMOUSE=$814A      CLRMSG  =$8326      CLRTOP  =$F836      COUT    =$FDED 
   CTR     =$09        DOSWARM =$03D0      ESTATTAB=$82DD      EXIT    =$8175 
?  FINDMOUSE=$8011      GR      =$C050      HOMEMOUSE=$8158      INITMOUSE=$8124 
   IRQ     =$8232      IRQDONE =$82B8      IRQLOC  =$03FE      IRQNEXT =$827E 
   KBD     =$C000      KBDSTRB =$C010      MAXP    =$06        MIX     =$C053 
   MOUID1  =$38        MOUID2  =$18        MOUID3  =$01        MOUID4  =$20 
   MOUID5  =$D6        MOUIDLOC1=$05        MOUIDLOC2=$07        MOUIDLOC3=$0B 
   MOUIDLOC4=$0C        MOUIDLOC5=$FB        MOUSEJMP=$816E      MOUSLOT =$08 
   MOUSTAT =$1E        MOUXPOS =$1A        MOUYPOS =$1C        NEWPROC =$80A3 
   NEWPROCTMP=$0A        NOMOUMSG=$8070      PFREE   =$FF        PLOT    =$F800 
   PPIDTAB =$82D1      PRBYTE  =$FDDA      PRIOTAB =$82C5      PRNTAX  =$F941 
   PROC0   =$839D      PROC1   =$8372      PROC2   =$834E      PROC3   =$832D 
   PROC4   =$82E3      PRUN    =$01        PSLEEP  =$03        PSTATTAB=$82D7 
   PZOMB   =$02        READMOUSE=$8164      RED     =$01        RESETCTR=$8273 
   SCRN    =$F871      SERVEMOUSE=$813E      SETCOL  =$F864      SETMOUSE=$8130 
   SLEEP   =$8200      SLPTAB  =$82CB      SPKR    =$C030      STKTAB  =$82BE 
   SYSINIT =$807B      VBLINT  =$09        VBLON   =$810C      WAIT    =$81B3 
   WAKEUP  =$81EF      WHITE   =$0F        YIELD   =$821A      YIELD2  =$8221 
Symbol table - numerical order: 
   BLACK   =$00        MOUID3  =$01        PRUN    =$01        RED     =$01 
   PZOMB   =$02        BLUE    =$02        PSLEEP  =$03        MOUIDLOC1=$05 
   BASEADDR=$06        MAXP    =$06        MOUIDLOC2=$07        MOUSLOT =$08 
   VBLINT  =$09        CTR     =$09        NEWPROCTMP=$0A        MOUIDLOC3=$0B 
   MOUIDLOC4=$0C        WHITE   =$0F        MOUID2  =$18        ACT     =$19 
   MOUXPOS =$1A        MOUYPOS =$1C        MOUSTAT =$1E        MOUID4  =$20 
   MOUID1  =$38        MOUID5  =$D6        MOUIDLOC5=$FB        PFREE   =$FF 
   DOSWARM =$03D0      IRQLOC  =$03FE   ?  FINDMOUSE=$8011      NOMOUMSG=$8070 
   SYSINIT =$807B      NEWPROC =$80A3      VBLON   =$810C      INITMOUSE=$8124 
   SETMOUSE=$8130      SERVEMOUSE=$813E      CLAMPMOUSE=$814A      HOMEMOUSE=$81 
 
 
                              ===== Page 13 ===== 
 58 
   READMOUSE=$8164      MOUSEJMP=$816E      EXIT    =$8175      WAIT    =$81B3 
   WAKEUP  =$81EF      SLEEP   =$8200      YIELD   =$821A      YIELD2  =$8221 
   IRQ     =$8232      RESETCTR=$8273      IRQNEXT =$827E      IRQDONE =$82B8 
   STKTAB  =$82BE      PRIOTAB =$82C5      SLPTAB  =$82CB      PPIDTAB =$82D1 
   PSTATTAB=$82D7      ESTATTAB=$82DD      PROC4   =$82E3      CLRMSG  =$8326 
   PROC3   =$832D      PROC2   =$834E      PROC1   =$8372      PROC0   =$839D 
   KBD     =$C000      KBDSTRB =$C010      SPKR    =$C030      GR      =$C050 
   MIX     =$C053      PLOT    =$F800      CLRTOP  =$F836      SETCOL  =$F864 
   SCRN    =$F871      PRNTAX  =$F941      PRBYTE  =$FDDA      COUT    =$FDED


== END ==

Back to comp.sys.apple2.programmer | Previous | NextNext in thread | Find similar | Unroll thread


Thread

Multitasking Mouse Draw Demo v1.2 D. Finnigan <dog_cow@macgui.com> - 2014-06-10 00:52 +0000
  Multitasking Mouse Draw Demo v1.2 Changes D. Finnigan <dog_cow@macgui.com> - 2014-06-10 00:53 +0000
    Re: Multitasking Mouse Draw Demo v1.2 Changes D Finnigan <dog_cow@macgui.com> - 2014-06-10 20:07 +0000

csiph-web