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


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

Source Code for Multitasking Mouse Draw Demo

From D Finnigan <dog_cow@macgui.com>
Newsgroups comp.sys.apple2.programmer
Subject Source Code for Multitasking Mouse Draw Demo
Date 2014-02-21 19:51 +0000
Organization bbs-scene usenet news
Message-ID <dog_cow-multitasking-source-20feb14@macgui.com> (permalink)
References <dog_cow-1393012033@macgui.com>

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

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


Thread

Multitasking Mouse Draw Demo D Finnigan <dog_cow@macgui.com> - 2014-02-21 19:47 +0000
  Documentation for Multitasking Mouse Draw Demo D Finnigan <dog_cow@macgui.com> - 2014-02-21 19:48 +0000
  Source Code for Multitasking Mouse Draw Demo D Finnigan <dog_cow@macgui.com> - 2014-02-21 19:51 +0000
  Source Code for Multitasking Mouse Draw Demo 2 D Finnigan <dog_cow@macgui.com> - 2014-02-21 19:55 +0000
  Re: Multitasking Mouse Draw Demo D Finnigan <dog_cow@macgui.com> - 2014-02-21 19:56 +0000
  Re: Multitasking Mouse Draw Demo Egan Ford <datajerk@gmail.com> - 2014-02-22 09:47 -0700
    Re: Multitasking Mouse Draw Demo D Finnigan <dog_cow@macgui.com> - 2014-02-22 17:36 +0000

csiph-web