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


Groups > comp.sys.apple2.programmer > #1413 > unrolled thread

Multitasking Mouse Draw Demo v1.3

Started byD Finnigan <dog_cow@macgui.com>
First post2014-12-18 19:52 +0000
Last post2015-01-26 22:48 +0000
Articles 20 on this page of 21 — 7 participants

Back to article view | Back to comp.sys.apple2.programmer


Contents

  Multitasking Mouse Draw Demo v1.3 D Finnigan <dog_cow@macgui.com> - 2014-12-18 19:52 +0000
    Source Code for Multitasking Mouse Draw Demo v1.3 D Finnigan <dog_cow@macgui.com> - 2014-12-18 19:56 +0000
      Re: Source Code for Multitasking Mouse Draw Demo v1.3 gids.rs@sasktel.net - 2014-12-19 15:24 -0800
        Re: Source Code for Multitasking Mouse Draw Demo v1.3 wssimms@gmail.com - 2014-12-27 14:09 -0800
          Re: Source Code for Multitasking Mouse Draw Demo v1.3 Michael J. Mahon <mjmahon@aol.com> - 2014-12-27 17:36 -0600
        Re: Source Code for Multitasking Mouse Draw Demo v1.3 D Finnigan <dog_cow@macgui.com> - 2014-12-28 13:38 +0000
          Re: Source Code for Multitasking Mouse Draw Demo v1.3 gids.rs@sasktel.net - 2014-12-28 10:45 -0800
            Re: Source Code for Multitasking Mouse Draw Demo v1.3 wssimms@gmail.com - 2014-12-28 15:14 -0800
            Re: Source Code for Multitasking Mouse Draw Demo v1.3 D Finnigan <dog_cow@macgui.com> - 2014-12-29 18:13 +0000
              Re: Source Code for Multitasking Mouse Draw Demo v1.3 gids.rs@sasktel.net - 2014-12-29 13:14 -0800
                Re: Source Code for Multitasking Mouse Draw Demo v1.3 D Finnigan <dog_cow@macgui.com> - 2014-12-30 09:25 +0000
                  Re: Source Code for Multitasking Mouse Draw Demo v1.3 "Bill Garber" <willy46pa@comcast.net> - 2014-12-30 05:44 -0500
                    Re: Source Code for Multitasking Mouse Draw Demo v1.3 D Finnigan <dog_cow@macgui.com> - 2014-12-30 12:25 +0000
                      Re: Source Code for Multitasking Mouse Draw Demo v1.3 Hugh Hood <hughhood@earthlink.net> - 2014-12-30 08:03 -0600
                        Re: Source Code for Multitasking Mouse Draw Demo v1.3 D Finnigan <dog_cow@macgui.com> - 2014-12-30 16:57 +0000
                      Re: Source Code for Multitasking Mouse Draw Demo v1.3 "Bill Garber" <willy46pa@comcast.net> - 2014-12-30 11:48 -0500
                      Re: Source Code for Multitasking Mouse Draw Demo v1.3 Martin Doherty <martindoherty377@gmail.com> - 2014-12-30 10:22 -0800
                        Re: Source Code for Multitasking Mouse Draw Demo v1.3 D Finnigan <dog_cow@macgui.com> - 2014-12-30 18:55 +0000
                          Re: Source Code for Multitasking Mouse Draw Demo v1.3 Michael J. Mahon <mjmahon@aol.com> - 2014-12-30 17:54 -0600
                            Re: Source Code for Multitasking Mouse Draw Demo v1.3 D Finnigan <dog_cow@macgui.com> - 2014-12-31 10:31 +0000
                              Re: Source Code for Multitasking Mouse Draw Demo v1.3 D Finnigan <dog_cow@macgui.com> - 2015-01-26 22:48 +0000

Page 1 of 2  [1] 2  Next page →


#1413 — Multitasking Mouse Draw Demo v1.3

FromD Finnigan <dog_cow@macgui.com>
Date2014-12-18 19:52 +0000
SubjectMultitasking Mouse Draw Demo v1.3
Message-ID<dog_cow-1418932376@macgui.com>
Here it is, my last Apple II project for this year 2014. Source code will
appear in a followup to this article, and is also available via email. I
will send you a disk image.

The Multitasking Mouse Draw Demo is a proof-of-concept program that shows
how true pre-emptive multitasking is possible on the 8-bit Apple, supporting
both a foreground and several background tasks. Version 1.3 supports up to 3
interrupting peripheral cards.

----------------

Changes to system since version 1.2:

- TimeMaster II H.O. support
- TIMESTOR has HH:MM:SS time
- WAIT system call sets sleep time in A-reg
- Interrupt-driven keyboard buffer
- GETCH call to return characters from keyboard buffer
- Interrupt-driven Super Serial Card support (receive only)
- GETSSC call to return characters from SSC in buffer

Changes to processes since version 1.2:

- There are now 7 total processes
- New process 5 will periodically display time if clock is installed
- Process 0 now uses GETCH for input
- Process 0 only clears screen on Escape key press
- New process 6 prints characters received by SSC

Work for version 1.3 mostly took place at the end of August and start of
September, 2014.
GETCH added 6th December 2014.
SSC support added 16 December 2014.

Notes on 17 Dec 14---

The system is tested to work OK on:
- Integer Apple II
- Apple II Plus
- unenhanced Apple IIe
- enhanced Apple IIe platinum

There is a conflict between the Super Serial Card and the TimeMaster II H.O.
clock card when sending interrupts. I don't know if it's a hardware or
software problem with the ISR routines. This conflict results in a hang when
the first character is received on the SSC on the enhanced IIe platinum. The
hang can be cleared by turning off SW 2-6 on the SSC. This conflict results
in severely degraded performance, including dropped characters, but no hang,
when the SSC receives characters on all other Apple systems.

-- 
]DF$
Apple II Book: http://macgui.com/newa2guide/
Usenet: http://macgui.com/usenet/  <-- get posts by email!
Apple II Web & Blog hosting: http://a2hq.com/

[toc] | [next] | [standalone]


#1414 — Source Code for Multitasking Mouse Draw Demo v1.3

FromD Finnigan <dog_cow@macgui.com>
Date2014-12-18 19:56 +0000
SubjectSource Code for Multitasking Mouse Draw Demo v1.3
Message-ID<dog_cow-multitasking-sourcev1.3-17dec14@macgui.com>
In reply to#1413
For the benefit of all Apple II users, the source code is hereby 
surrendered into the public domain. I claim no copyright on the source code. 

Assembler used is Merlin. 



                1    KBD      EQU   $C000      
                2    KBDSTRB  EQU   $C010      
                3    SPKR     EQU   $C030      
                4    PRBYTE   EQU   $FDDA      
                5    PRNTAX   EQU   $F941      
                6    DOSWARM  EQU   $3D0       
                7    IRQLOC   EQU   $3FE       
                8    IN       EQU   $0200      ; KEYBOARD INPUT BUFFER
                9    COUT     EQU   $FDED      
                10   VBLINT   EQU   $09        
                11   MOUIDLOC1 EQU  $05        ; LOCATIONS OF MOUSE ID BYTES
                12   MOUIDLOC2 EQU  $07        
                13   MOUIDLOC3 EQU  $0B        
                14   MOUIDLOC4 EQU  $0C        
                15   MOUIDLOC5 EQU  $FB        
                16   MOUID1   EQU   $38        ; MOUSE ID BYTES
                17   MOUID2   EQU   $18        
                18   MOUID3   EQU   $01        
                19   MOUID4   EQU   $20        
                20   MOUID5   EQU   $D6        
                21   CLKIDLOC1 EQU  $00        ; LOCATIONS OF CLOCK ID BYTES
                22   CLKIDLOC2 EQU  $01        
                23   CLKIDLOC3 EQU  $0C        
                24   CLKIDLOC4 EQU  $FE        
                25   CLKID1   EQU   $08        ; CLOCK ID BYTES
                26   CLKID2   EQU   $78        
                27   CLKID3   EQU   $B8        
                28   CLKID4   EQU   $B2        
                29   BASEADDR EQU   $06        ; 2-BYTES FOR INDEXED ADDRESSING
                30   MOUSLOT  EQU   $08        ; MOUSE CARD SLOT
                31   CTR      EQU   $09        ; IRQ COUNTER
                32   ACT      EQU   $19        ; ACTIVE PROCESS
                33   NEWPROCTMP EQU $0A        ; TEMP HOLDER FOR NEW PROCESS ID
                34   MAXP     EQU   $07        ; MAXIMUM NUMBER OF PROCESSES
                35   MOUXPOS  EQU   $1A        ; 2 BYTES FOR MOUSE X-POSITION
                36   MOUYPOS  EQU   $1C        
                37   MOUSTAT  EQU   $1E        
                38   CLKSLOT  EQU   $1F        ; CLOCK CARD SLOT
                39   KINPTR   EQU   $4A        ; KBD BUFFER INCOMING POINTER
                40   KOUTPTR  EQU   $4B        ; KBD BUFFER OUTGOING POINTER
                41   KBUFCNT  EQU   $4C        ; KBD BUFFER CHARACTER COUNTER
                42   *
                43   * SSC SUPPORT
                44   *
                45   SBUFLOC  EQU   $9000      ; MEMORY LOCATION OF FIFO BUFFER
                46   SBUFPTR  EQU   $56        ; TWO BYTES BASE ADDRESS
                47   SINPTR   EQU   $58        ; INCOMING DATA POINTER (FOR WRITES)
                48   SOUTPTR  EQU   $59        ; OUTGOING DATA POINTER (FOR READS)
                49   SBUFCNT  EQU   $5A        ; BUFFER CHARACTER COUNTER
                50   SSCSLOT  EQU   $5B        ; SSC SLOT AS $N0
                51   *
                52   SRDREG   EQU   $C088      ; READ DATA REGISTER (READ)
                53   SSTREG   EQU   $C089      ; STATUS REGISTER (READ)
                54   SRESET   EQU   $C089      ; SOFTWARE RESET (WRITE)
                55   SCMDREG  EQU   $C08A      ; COMMAND REGISTER (R/W)
                56   SCTLREG  EQU   $C08B      ; CONTROL REGISTER (R/W)
                57   *
                58   SSCID1   EQU   $38        
                59   SSCID2   EQU   $18        
                60   SSCID3   EQU   $01        
                61   SSCID4   EQU   $31        
                62   SSCID5   EQU   $08        
                63   SSCLOC1  EQU   $05        
                64   SSCLOC2  EQU   $07        
                65   SSCLOC3  EQU   $0B        
                66   SSCLOC4  EQU   $0C        
                67   SSCLOC5  EQU   $FF        
                68   *
                69   PFREE    EQU   $FF        ; PROCESS SLOT FREE - CHANGE WITH CARE
                70   PRUN     EQU   $01        ; RUNNING PROCESS
                71   PZOMB    EQU   $02        ; ZOMBIE PROCESS
                72   PSLEEP   EQU   $03        ; SLEEPING PROCESS
                73   *
                74   CLRTOP   EQU   $F836      
                75   SETCOL   EQU   $F864      
                76   PLOT     EQU   $F800      
                77   SCRN     EQU   $F871      
                78   GR       EQU   $C050      
                79   MIX      EQU   $C053      
                80   RED      EQU   $01        
                81   BLUE     EQU   $02        
                82   BLACK    EQU   $00        
                83   WHITE    EQU   $0F        
                84   *
                85            ORG   $6000      
                86   *
6000: A9 9B     87            LDA   #$9B       
6002: 20 ED FD  88            JSR   COUT       
6005: A9 91     89            LDA   #$91       ; KILL 80-COLS FIRMWARE
6007: 20 ED FD  90            JSR   COUT       
600A: A2 14     91            LDX   #$14       
600C: 86 22     92            STX   $22        ; TOP OF TEXT WINDOW
600E: CA        93            DEX              
600F: 86 25     94            STX   $25        
                95   * FIND MOUSE
6011: A9 00     96            LDA   #$00       
6013: 85 06     97            STA   BASEADDR   
6015: A9 C8     98            LDA   #$C8       
6017: 85 07     99            STA   BASEADDR+1 
6019: A2 08     100           LDX   #$08       
601B: CA        101  :LOOP1   DEX              
601C: F0 48     102           BEQ   :NOMOUSE   
601E: C6 07     103           DEC   BASEADDR+1 
6020: A0 05     104           LDY   #MOUIDLOC1 
6022: B1 06     105           LDA   (BASEADDR),Y 
6024: C9 38     106           CMP   #MOUID1    
6026: D0 F3     107           BNE   :LOOP1     
6028: A0 07     108           LDY   #MOUIDLOC2 
602A: B1 06     109           LDA   (BASEADDR),Y 
602C: C9 18     110           CMP   #MOUID2    
602E: D0 EB     111           BNE   :LOOP1     
6030: A0 0B     112           LDY   #MOUIDLOC3 
6032: B1 06     113           LDA   (BASEADDR),Y  
6034: C9 01     114           CMP   #MOUID3    
6036: D0 E3     115           BNE   :LOOP1     
6038: A0 0C     116           LDY   #MOUIDLOC4 
603A: B1 06     117           LDA   (BASEADDR),Y 
603C: C9 20     118           CMP   #MOUID4    
603E: D0 DB     119           BNE   :LOOP1     
6040: A0 FB     120           LDY   #MOUIDLOC5 
6042: B1 06     121           LDA   (BASEADDR),Y 
6044: C9 D6     122           CMP   #MOUID5    
6046: D0 D3     123           BNE   :LOOP1     
6048: 8A        124           TXA              
6049: 0A        125           ASL              
604A: 0A        126           ASL              
604B: 0A        127           ASL              
604C: 0A        128           ASL              
604D: 85 08     129           STA   MOUSLOT    
604F: A9 8D     130           LDA   #$8D       
6051: 20 ED FD  131           JSR   COUT       
6054: 8A        132           TXA              
6055: 20 DA FD  133           JSR   PRBYTE     
6058: A9 8D     134           LDA   #$8D       
605A: 20 ED FD  135           JSR   COUT       
605D: 20 85 60  136           JSR   FINDCLOCK  
6060: 20 1B 61  137           JSR   FINDSSC    
6063: 4C A8 61  138           JMP   SYSINIT    ; SYSTEM INITIALIZATION
6066: A0 00     139  :NOMOUSE LDY   #$00       
6068: B9 7A 60  140  :LOOP    LDA   NOMOUMSG,Y 
606B: F0 06     141           BEQ   :DONE      
606D: 20 ED FD  142           JSR   COUT       
6070: C8        143           INY              
6071: D0 F5     144           BNE   :LOOP      
6073: A9 00     145  :DONE    LDA   #$00       
6075: 85 22     146           STA   $22        ; RESTORE TEXT WINDOW
6077: 4C D0 03  147           JMP   DOSWARM    
607A: 8D CE CF  148  NOMOUMSG HEX   8DCECFA0CDCFD5D3C58D00 
607D: A0 CD CF D5 D3 C5 8D 00 
                149  *
                150  * FINDCLOCK
                151  *
                152  * CURRENTLY TRAINED TO LOOK FOR AN A.E.
                153  * TIMEMASTER II H.O.
                154  * THIS USES A 6821 PIA AND M5832 CLOCK CHIP
                155  *
6085: A9 00     156  FINDCLOCK LDA  #$00       
6087: 85 06     157           STA   BASEADDR   
6089: 85 1F     158           STA   CLKSLOT    
608B: A5 07     159           LDA   BASEADDR+1 ; SAVE MOUSE BASEADDR
608D: 48        160           PHA              
608E: A9 C8     161           LDA   #$C8       
6090: 85 07     162           STA   BASEADDR+1 
6092: A2 08     163           LDX   #$08       
6094: CA        164  :LOOP1   DEX              
6095: F0 3B     165           BEQ   :NOCLOCK   
6097: C6 07     166           DEC   BASEADDR+1 
6099: A0 00     167           LDY   #CLKIDLOC1 
609B: B1 06     168           LDA   (BASEADDR),Y 
609D: C9 08     169           CMP   #CLKID1     
609F: D0 F3     170           BNE   :LOOP1     
60A1: A0 01     171           LDY   #CLKIDLOC2 
60A3: B1 06     172           LDA   (BASEADDR),Y 
60A5: C9 78     173           CMP   #CLKID2    
60A7: D0 EB     174           BNE   :LOOP1     
60A9: A0 0C     175           LDY   #CLKIDLOC3 
60AB: B1 06     176           LDA   (BASEADDR),Y 
60AD: C9 B8     177           CMP   #CLKID3    
60AF: D0 E3     178           BNE   :LOOP1     
60B1: A0 FE     179           LDY   #CLKIDLOC4 
60B3: B1 06     180           LDA   (BASEADDR),Y 
60B5: C9 B2     181           CMP   #CLKID4    
60B7: D0 DB     182           BNE   :LOOP1     
60B9: 8A        183           TXA              
60BA: 0A        184           ASL              
60BB: 0A        185           ASL              
60BC: 0A        186           ASL              
60BD: 0A        187           ASL              
60BE: 85 1F     188           STA   CLKSLOT    
60C0: A9 8D     189           LDA   #$8D       
60C2: 20 ED FD  190           JSR   COUT       
60C5: 8A        191           TXA              
60C6: 20 DA FD  192           JSR   PRBYTE     
60C9: A9 8D     193           LDA   #$8D       
60CB: 20 ED FD  194           JSR   COUT       
60CE: 68        195           PLA              ; RESTORE MOUSE BASEADDR
60CF: 85 07     196           STA   BASEADDR+1 
60D1: 60        197           RTS              
60D2: A0 00     198  :NOCLOCK LDY   #$00       
60D4: B9 10 61  199  :LOOP    LDA   NOCLKMSG,Y 
60D7: F0 06     200           BEQ   :DONE      
60D9: 20 ED FD  201           JSR   COUT       
60DC: C8        202           INY              
60DD: D0 F5     203           BNE   :LOOP      
60DF: 68        204  :DONE    PLA              ; RESTORE MOUSE BASEADDR
60E0: 85 07     205           STA   BASEADDR+1 
60E2: 60        206           RTS              
                207  * SETUP 1 SECOND CLOCK INTERRUPTS
60E3: A6 1F     208  INITCLK  LDX   CLKSLOT    
60E5: F0 28     209           BEQ   :DONE      ; NO CLOCK INSTALLED?
60E7: A9 00     210           LDA   #$00       ; POINT AT DIRECTION REGISTERS
60E9: 8D 1C 65  211           STA   TIMESTOR   ; ZERO-OUT OUR TIME
60EC: 9D 81 C0  212           STA   $C081,X    ; CONTROL REGISTER A
60EF: 9D 83 C0  213           STA   $C083,X    ; CONTROL REGISTER B
60F2: 9D 80 C0  214           STA   $C080,X    ; PORT A - ALL INPUT
60F5: A9 FF     215           LDA   #$FF       
60F7: 9D 82 C0  216           STA   $C082,X    ; PORT B - ALL OUTPUT
60FA: A9 0C     217           LDA   #$0C       ; 1 IRQ/SEC
60FC: 9D 81 C0  218           STA   $C081,X    
60FF: A9 04     219           LDA   #$04       ; 1 IRQ/SEC
6101: 9D 83 C0  220           STA   $C083,X    
6104: A9 2F     221           LDA   #$2F       ; ENABLE PIA INTERRUPTS
6106: 9D 82 C0  222           STA   $C082,X    
6109: BD 80 C0  223           LDA   $C080,X    ; CLEAR ANY PENDING IRQ
610C: BD 82 C0  224           LDA   $C082,X    
610F: 60        225  :DONE    RTS              
6110: 8D CE CF  226  NOCLKMSG HEX   8DCECFA0C3CCCFC3CB8D00  
6113: A0 C3 CC CF C3 CB 8D 00 
                227  *
                228  * FIND A SUPER SERIAL CARD
                229  * THE SYSTEM WILL COMMUNICATE DIRECTLY TO THE ACIA
                230  * IMPORTANT: SWITCH 2-6 FOR INTERRUPTS MUST BE ON!
                231  *
                232  FINDSSC                   
611B: A9 00     233           LDA   #$00       
611D: 85 56     234           STA   SBUFPTR    
611F: 85 5B     235           STA   SSCSLOT    
6121: A9 C8     236           LDA   #$C8       
6123: 85 57     237           STA   SBUFPTR+1  
6125: A2 08     238           LDX   #$08       
6127: CA        239  :LOOP1   DEX              
6128: F0 40     240           BEQ   :NOSSC     
612A: C6 57     241           DEC   SBUFPTR+1  
612C: A0 05     242           LDY   #SSCLOC1   
612E: B1 56     243           LDA   (SBUFPTR),Y 
6130: C9 38     244           CMP   #SSCID1    
6132: D0 F3     245           BNE   :LOOP1     
6134: A0 07     246           LDY   #SSCLOC2   
6136: B1 56     247           LDA   (SBUFPTR),Y 
6138: C9 18     248           CMP   #SSCID2    
613A: D0 EB     249           BNE   :LOOP1     
613C: A0 0B     250           LDY   #SSCLOC3   
613E: B1 56     251           LDA   (SBUFPTR),Y 
6140: C9 01     252           CMP   #SSCID3    
6142: D0 E3     253           BNE   :LOOP1     
6144: A0 0C     254           LDY   #SSCLOC4   
6146: B1 56     255           LDA   (SBUFPTR),Y 
6148: C9 31     256           CMP   #SSCID4    
614A: D0 DB     257           BNE   :LOOP1     
614C: A0 FF     258           LDY   #SSCLOC5   
614E: B1 56     259           LDA   (SBUFPTR),Y 
6150: C9 08     260           CMP   #SSCID5    
6152: D0 D3     261           BNE   :LOOP1     
6154: 8A        262           TXA              ; SLOT NUMBER IN X
6155: 0A        263           ASL              
6156: 0A        264           ASL              
6157: 0A        265           ASL              
6158: 0A        266           ASL              
6159: 85 5B     267           STA   SSCSLOT    
615B: A9 8D     268           LDA   #$8D       
615D: 20 ED FD  269           JSR   COUT       
6160: 8A        270           TXA              
6161: 20 DA FD  271           JSR   PRBYTE     
6164: A9 8D     272           LDA   #$8D       
6166: 20 ED FD  273           JSR   COUT       
6169: 60        274           RTS              
616A: A0 00     275  :NOSSC   LDY   #$00       
616C: B9 78 61  276  :LOOP    LDA   :NOSSCM,Y  
616F: F0 06     277           BEQ   :DONE      
6171: 20 ED FD  278           JSR   COUT       
6174: C8        279           INY              
6175: D0 F5     280           BNE   :LOOP      
6177: 60        281  :DONE    RTS              
6178: 8D CE CF  282  :NOSSCM  HEX   8DCECFA0D3D3C38D00  
617B: A0 D3 D3 C3 8D 00 
                283  * SETUP THE SSC PARAMETERS
6181: A6 5B     284  INITSSC  LDX   SSCSLOT    
6183: F0 22     285           BEQ   :DONE      ; NO SSC INSTALLED?
6185: A9 00     286           LDA   #<SBUFLOC  
6187: 85 56     287           STA   SBUFPTR    
6189: A9 90     288           LDA   #>SBUFLOC  
618B: 85 57     289           STA   SBUFPTR+1  
618D: A9 00     290           LDA   #$00       
618F: 85 58     291           STA   SINPTR     
6191: 85 59     292           STA   SOUTPTR    
6193: 85 5A     293           STA   SBUFCNT    
6195: A4 5B     294           LDY   SSCSLOT    ; GET SLOT $N0
6197: 99 89 C0  295           STA   SRESET,Y   
619A: A9 1E     296           LDA   #$1E       ; 1 STOP, 8 DATA, 9600 BAUD
619C: 99 8B C0  297           STA   SCTLREG,Y  
619F: A9 09     298           LDA   #$09       ; ENABLE IRQ, NO PARITY
61A1: 99 8A C0  299           STA   SCMDREG,Y  
61A4: B9 88 C0  300           LDA   SRDREG,Y   
61A7: 60        301  :DONE    RTS              
                302  *
                303  *
61A8: 58        304  SYSINIT  CLI              ; CREATE INITIAL PROCESS 0
61A9: 08        305           PHP              
61AA: 78        306           SEI              
61AB: A9 FF     307           LDA   #PFREE     
61AD: 8D F1 64  308           STA   STKTAB     
61B0: 85 19     309           STA   ACT        
61B2: A0 06     310           LDY   #MAXP-1    ; CLEAR PROCESS TABLES
61B4: 99 0E 65  311  :L1      STA   PSTATTAB,Y 
61B7: 99 15 65  312           STA   ESTATTAB,Y 
61BA: 99 07 65  313           STA   PPIDTAB,Y  
61BD: 88        314           DEY              
61BE: 10 F4     315           BPL   :L1        
61C0: A0 16     316           LDY   #$16       ; PRIORITY IN Y-REG
61C2: A9 41     317           LDA   #<PROC0    
61C4: A2 66     318           LDX   #>PROC0    
61C6: 20 E1 61  319           JSR   NEWPROC    
61C9: 20 4A 62  320           JSR   VBLON      ; ENABLE MOUSE CARD VBL INTERRUPTS
61CC: 20 E3 60  321           JSR   INITCLK    ; ENABLE CLOCK CARD INTERRUPTS
61CF: 20 81 61  322           JSR   INITSSC    ; ENABLE SUPER SERIAL CARD INTERRUPTS
                323  * PREPARE KEYBOARD BUFFER
61D2: A9 00     324           LDA   #$00       
61D4: 85 4A     325           STA   KINPTR     
61D6: 85 4B     326           STA   KOUTPTR    
61D8: 85 4C     327           STA   KBUFCNT    
61DA: 8D 00 02  328           STA   IN         
61DD: 28        329           PLP              ; ENABLE IRQ
61DE: 4C DE 61  330  :IDLE    JMP   :IDLE      
                331  *
                332  * CREATE A NEW PROCESS IN THE SYSTEM
                333  * THIS MUST BE CALLED DIRECTLY UNTIL FORK AND EXEC
                334  * CALLS ARE ADDED.
                335  * Y-REG = PROCESS PRIORITY
                336  * A-REG = LOW BYTE OF STARTING ADDRESS 
                337  * X-REG = HIGH BYTE OF "" ""
                338  *
                339  * RETURNS WITH NEW PROCESS ID IN Y-REG
                340  *
61E1: 08        341  NEWPROC  PHP              
61E2: 78        342           SEI              
61E3: 48        343           PHA              
61E4: 8A        344           TXA              
61E5: 48        345           PHA              
61E6: 98        346           TYA              
61E7: 48        347           PHA              
61E8: A0 00     348           LDY   #$00       ; FIND A FREE PROCESS ID
61EA: B9 0E 65  349  :L1      LDA   PSTATTAB,Y ; CHECK PROCESS STATUS
61ED: C9 FF     350           CMP   #PFREE     ; IS IT FREE?
61EF: F0 08     351           BEQ   :FREE      ; YES!
61F1: C8        352           INY              ; NO, SO MOVE ON TO NEXT ONE
61F2: C0 07     353           CPY   #MAXP      ; REACHED OUR LIMIT?
61F4: D0 F4     354           BNE   :L1        ; NO, SO CARRY ON
61F6: 38        355           SEC              ; ERROR, NO FREE PROCESS SLOTS
61F7: B0 50     356           BCS   :DONE      ; EXIT WITH ERROR CONDITION
61F9: EE F1 64  357  :FREE    INC   STKTAB     ; INCREMENT PROCESS COUNT
61FC: 84 0A     358           STY   NEWPROCTMP 
61FE: F0 0F     359           BEQ   :TSX       ; OFFSET FROM CURRENT SP
6200: 88        360           DEY              ; OFFSET FROM LAST PROC SP
6201: C4 19     361           CPY   ACT        ; CURRENT PROCESS?
6203: F0 0A     362           BEQ   :TSX       
6205: BE F2 64  363           LDX   STKTAB+1,Y 
6208: 8A        364           TXA              
6209: 38        365           SEC              
620A: E9 20     366           SBC   #$20       ; NEW PROC SP
620C: C8        367           INY              
620D: D0 07     368           BNE   :STORSP    
620F: BA        369  :TSX     TSX              
6210: 8A        370           TXA              
6211: 38        371           SEC              
6212: E9 20     372           SBC   #$20       
6214: A4 0A     373           LDY   NEWPROCTMP ; RELOAD NEW PROCESS ID
6216: AA        374  :STORSP  TAX              
6217: 99 F2 64  375           STA   STKTAB+1,Y 
621A: 68        376           PLA              ; PROCESS PRIORITY
621B: 99 F9 64  377           STA   PRIOTAB,Y  
621E: 68        378           PLA              ; HI-BYTE OF START ADDR
621F: 9D 00 01  379           STA   $0100,X    
6222: CA        380           DEX              
6223: 68        381           PLA              ; LO-BYTE OF START ADDR
6224: 9D 00 01  382           STA   $0100,X    
6227: A9 00     383           LDA   #$00       ; INITIAL PROCESSOR STATUS
6229: CA        384           DEX              
622A: 9D 00 01  385           STA   $0100,X    
622D: CA        386           DEX              
622E: 9D 00 01  387           STA   $0100,X    ; INITIAL REGISTERS
6231: CA        388           DEX              
6232: 9D 00 01  389           STA   $0100,X    
6235: CA        390           DEX              
6236: 9D 00 01  391           STA   $0100,X    
6239: CA        392           DEX              
623A: 8A        393           TXA               
623B: 99 F2 64  394           STA   STKTAB+1,Y 
623E: A5 19     395           LDA   ACT        ; GET PARENT PROCESS ID
6240: 99 07 65  396           STA   PPIDTAB,Y  ; STORE IN PPID TABLE
6243: A9 01     397           LDA   #PRUN      ; PROCESS STATUS
6245: 99 0E 65  398           STA   PSTATTAB,Y 
6248: 28        399           PLP              
6249: 60        400  :DONE    RTS              
                401  *
624A: A9 01     402  VBLON    LDA   #$01       
624C: 20 6E 62  403           JSR   SETMOUSE   
624F: 20 62 62  404           JSR   INITMOUSE  
6252: A9 8D     405           LDA   #<IRQ      
6254: 8D FE 03  406           STA   IRQLOC     
6257: A9 63     407           LDA   #>IRQ      
6259: 8D FF 03  408           STA   IRQLOC+1   
625C: A9 09     409           LDA   #VBLINT    
625E: 20 6E 62  410           JSR   SETMOUSE   ; TURN ON MOUSE VBL INTERRUPTS
6261: 60        411           RTS              
                412  *
                413  * ON APPLE II AND II PLUS, THIS WILL CLEAR HGR PAGE 1 ($2000)
6262: A0 19     414  INITMOUSE LDY  #$19       
6264: A9 00     415           LDA   #$00       
6266: 85 06     416           STA   BASEADDR   
6268: B1 06     417           LDA   (BASEADDR),Y 
626A: 85 06     418           STA   BASEADDR   
626C: D0 3E     419           BNE   MOUSEJMP   
                420  *
626E: A0 12     421  SETMOUSE LDY   #$12       
6270: AA        422           TAX              
6271: A9 00     423           LDA   #$00       
6273: 85 06     424           STA   BASEADDR   
6275: B1 06     425           LDA   (BASEADDR),Y 
6277: 85 06     426           STA   BASEADDR   
6279: 8A        427           TXA              
627A: 10 30     428           BPL   MOUSEJMP   
                429  *
627C: A0 13     430  SERVEMOUSE LDY #$13       
627E: A9 00     431           LDA   #$00       
6280: 85 06     432           STA   BASEADDR   
6282: B1 06     433           LDA   (BASEADDR),Y 
6284: 85 06     434           STA   BASEADDR   
6286: D0 24     435           BNE   MOUSEJMP   
                436  *
6288: AA        437  CLAMPMOUSE TAX            
6289: A0 17     438           LDY   #$17       
628B: A9 00     439           LDA   #$00       
628D: 85 06     440           STA   BASEADDR   
628F: B1 06     441           LDA   (BASEADDR),Y 
6291: 85 06     442           STA   BASEADDR   
6293: 8A        443           TXA              
6294: 10 16     444           BPL   MOUSEJMP   
                445  *
6296: A0 18     446  HOMEMOUSE LDY  #$18       
6298: A9 00     447           LDA   #$00       
629A: 85 06     448           STA   BASEADDR   
629C: B1 06     449           LDA   (BASEADDR),Y  
629E: 85 06     450           STA   BASEADDR   
62A0: D0 0A     451           BNE   MOUSEJMP   
                452  *
62A2: A0 14     453  READMOUSE LDY  #$14       
62A4: A9 00     454           LDA   #$00       
62A6: 85 06     455           STA   BASEADDR   
62A8: B1 06     456           LDA   (BASEADDR),Y 
62AA: 85 06     457           STA   BASEADDR   
                458  *
62AC: A6 07     459  MOUSEJMP LDX   BASEADDR+1 
62AE: A4 08     460           LDY   MOUSLOT    
62B0: 6C 06 00  461           JMP   (BASEADDR) 
                462  *
                463  * RETURN A SINGLE CHARACTER FROM THE KEYBOARD BUFFER
                464  * CARRY FLAG SET IF THE BUFFER IS EMPTY, ELSE CHAR
                465  * IS IN A-REG WITH CARRY CLEAR
                466  * X-REG IS NOT SAVED!
                467  GETCH                     
62B3: 38        468           SEC              
62B4: A5 4C     469           LDA   KBUFCNT    
62B6: F0 0A     470           BEQ   :DONE      
62B8: A6 4B     471           LDX   KOUTPTR    
62BA: BD 00 02  472           LDA   IN,X       
62BD: C6 4C     473           DEC   KBUFCNT    
62BF: E6 4B     474           INC   KOUTPTR    
62C1: 18        475           CLC              
62C2: 60        476  :DONE    RTS              
                477  *
                478  * RETURN A SINGLE CHARACTER FROM THE SSC BUFFER
                479  * CARRY FLAG IS SET IF THE BUFFER IS EMPTY, ELSE CHAR
                480  * IS IN A-REG WITH CARRY CLEAR
                481  * Y-REG IS NOT SAVED!
                482  GETSSC                    
62C3: 38        483           SEC              
62C4: A5 5A     484           LDA   SBUFCNT    
62C6: F0 09     485           BEQ   :DONE      
62C8: A4 59     486           LDY   SOUTPTR    
62CA: B1 56     487           LDA   (SBUFPTR),Y 
62CC: C6 5A     488           DEC   SBUFCNT    
62CE: E6 59     489           INC   SOUTPTR    
62D0: 18        490           CLC              
62D1: 60        491  :DONE    RTS              
                492  *
                493  *
                494  * TERMINATE A PROCESS AND RETURN A STATUS CODE
                495  * TO THE PARENT PROCESS
                496  * A-REG HOLDS THE STATUS CODE
                497  *
62D2: A4 19     498  EXIT     LDY   ACT        ; GET PROCESS ID
62D4: 99 15 65  499           STA   ESTATTAB,Y ; STORE EXIT STATUS
62D7: A9 02     500           LDA   #PZOMB     
62D9: 99 0E 65  501           STA   PSTATTAB,Y ; BECOME A ZOMBIE
62DC: A4 19     502  :L0      LDY   ACT        ; SEARCH PROCESS TABLE FOR OUR PARENT
62DE: B9 07 65  503           LDA   PPIDTAB,Y  ; GET OUR PARENT PROCESS ID
62E1: C9 FF     504           CMP   #PFREE     ; CHECK IF THE PROCESS STILL EXISTS 
62E3: F0 22     505           BEQ   :NOPARENT  ; NO PARENT PROCESS
62E5: 98        506  :PARENT  TYA              ; FOUND PARENT; SAVE ITS PID
62E6: 48        507           PHA              
62E7: A0 01     508           LDY   #$01       ; PROCESS 1 (INIT)
62E9: 20 4A 63  509           JSR   WAKEUP     
62EC: 68        510           PLA              
62ED: A8        511           TAY              ; RESTORE SAVED PID
62EE: 20 4A 63  512           JSR   WAKEUP     ; NOW WAKE UP THE PARENT PROCESS
                513  * SEARCH FOR CHILDREN
62F1: A0 00     514           LDY   #$00       ; INITIALIZE PROCESS ID FOR LOOP
62F3: B9 07 65  515  :CL1     LDA   PPIDTAB,Y  ; GET THE PARENT PROCESS ID
62F6: C5 19     516           CMP   ACT        ; IS IT OUR PROCESS ID?
62F8: D0 05     517           BNE   :CNEXT     ; NO, SO MOVE ON
62FA: A9 01     518           LDA   #$01       ; NEW PARENT PID IS 1 (INIT)
62FC: 99 07 65  519           STA   PPIDTAB,Y  ; SET THE NEW PPID
                520  * TODO: CHECK FOR STOPPED PROCESS
62FF: C8        521  :CNEXT   INY              ; POINT TO NEXT PROCESS ID
6300: C9 07     522           CMP   #MAXP      ; AT PROCESS LIMIT?
6302: D0 EF     523           BNE   :CL1       ; NO, SO CONTINUE
6304: 4C E5 63  524           JMP   RESETCTR   ; RUN NEXT PROCESS
6307: A9 01     525  :NOPARENT LDA  #$01       ; PARENT IS NOW PID 1 (INIT)
6309: 99 07 65  526           STA   PPIDTAB,Y  ; UPDATE OUR PROCESS PARENT
630C: D0 CE     527           BNE   :L0        ; DO THE PARENT CHECK AGAIN (ALWAYS TAKEN)
                528  *
                529  * WAIT FOREVER FOR A CHILD PROCESS TO TERMINATE
                530  * AND COLLECT ITS TERMINATION STATUS
                531  * A-REG = TERMINATION STATUS
                532  * Y-REG = CHILD PROCESS ID
                533  * CARRY SET = ERROR: NO CHILD PROCESSES EXIST
                534  *
630E: A2 00     535  WAIT     LDX   #$00       ; USED AS ANY CHILD FOUND FLAG
6310: A0 00     536  :L1      LDY   #00        ; SEARCH PROCESS TABLE FOR OUR CHILDREN
6312: B9 07 65  537  :L2      LDA   PPIDTAB,Y  ; GET CHILD STATUS
6315: C5 19     538           CMP   ACT        ; OUR CHILD?
6317: D0 08     539           BNE   :NEXT      ; NO
6319: E8        540           INX              ; FOUND AT LEAST ONE CHILD
631A: B9 0E 65  541           LDA   PSTATTAB,Y ; GET PROCESS STATUS
631D: C9 02     542           CMP   #PZOMB     ; IS A ZOMBIE?
631F: F0 10     543           BEQ   :COLL      ; YES, SO COLLECT STATUS
6321: C8        544  :NEXT    INY              
6322: C0 07     545           CPY   #MAXP      ; SEARCHED THE ENTIRE PROCESS TABLE?
6324: D0 EC     546           BNE   :L2        
6326: 8A        547           TXA              ; CHECK OUR CHILD FLAG
6327: F0 1D     548           BEQ   :NOCHILD   ; NO CHILDREN, SO RETURN ERROR
6329: A9 7F     549           LDA   #$7F       ; SLEEP TIME
632B: 20 5B 63  550           JSR   SLEEP      ; GO TO SLEEP
632E: 4C 10 63  551           JMP   :L1        ; LOOK FOR CHILDREN AGAIN
6331: B9 15 65  552  :COLL    LDA   ESTATTAB,Y ; EXIT STATUS OF CHILD PROCESS
6334: 48        553           PHA              
6335: A9 FF     554           LDA   #PFREE     ; CLEAR PROCESS SLOT
6337: 99 0E 65  555           STA   PSTATTAB,Y 
633A: 99 07 65  556           STA   PPIDTAB,Y  
633D: 99 15 65  557           STA   ESTATTAB,Y 
6340: CE F1 64  558           DEC   STKTAB     ; DECREMENT PROCESS COUNT 
6343: 68        559           PLA              ; GET EXIT STATUS BACK
6344: 18        560           CLC              ; NO ERROR
6345: 60        561           RTS              
6346: 68        562  :NOCHILD PLA              
6347: AA        563           TAX              
6348: 38        564           SEC              ; ERROR FLAG
6349: 60        565           RTS              
                566  *
                567  * FORCIBLY WAKE A SLEEPING PROCESS
                568  * IF PROCESS IS NOT ASLEEP, NOTHING HAPPENS
                569  * Y-REG HOLDS PROCESS ID
                570  *
634A: C0 07     571  WAKEUP   CPY   #MAXP      
634C: F0 0C     572           BEQ   :DONE      ; OVER LIMIT
634E: B9 0E 65  573           LDA   PSTATTAB,Y ; GET PROCESS STATUS
6351: C9 03     574           CMP   #PSLEEP    ; IS IT SLEEPING?
6353: D0 05     575           BNE   :DONE      ; NO, SO EXIT NOW
6355: A9 01     576           LDA   #PRUN      ; RUN STATUS
6357: 99 0E 65  577           STA   PSTATTAB,Y ; SET NEW STATUS
635A: 60        578  :DONE    RTS              
                579  *
                580  * PUT A PROCESS TO SLEEP FOR A TIME
                581  * A-REG HOLDS SLEEPING TIME
                582  *
635B: 08        583  SLEEP    PHP              
635C: 78        584           SEI              
635D: 48        585           PHA              
635E: 8A        586           TXA              
635F: 48        587           PHA              
6360: 98        588           TYA              
6361: 48        589           PHA              
6362: A4 19     590           LDY   ACT        
6364: BA        591           TSX              ; GET SLEEP DURATION...
6365: E8        592           INX              ; ...OUT OF THE STACK
6366: E8        593           INX              
6367: E8        594           INX              
6368: BD 00 01  595           LDA   $0100,X    
636B: 99 00 65  596           STA   SLPTAB,Y   ; STORE SLEEP DURATION
636E: A9 03     597           LDA   #PSLEEP    
6370: 99 0E 65  598           STA   PSTATTAB,Y ; SET PROCESS STATUS TO SLEEPING
6373: D0 07     599           BNE   YIELD2     ; ALWAYS TAKEN
                600  *
                601  * GIVE UP REMAINING CPU TIME FOR THIS PROCESS
                602  *
6375: 08        603  YIELD    PHP              
6376: 78        604           SEI              
6377: 48        605           PHA              
6378: 8A        606           TXA              
6379: 48        607           PHA              
637A: 98        608           TYA              
637B: 48        609           PHA              
637C: BA        610  YIELD2   TSX              ; FIX JSR RETURN FOR RTI
637D: 8A        611           TXA              
637E: 18        612           CLC              
637F: 69 05     613           ADC   #$05       
6381: AA        614           TAX              
6382: FE 00 01  615           INC   $0100,X     
6385: D0 5E     616           BNE   RESETCTR   
6387: E8        617           INX              
6388: FE 00 01  618           INC   $0100,X    
638B: D0 58     619           BNE   RESETCTR   
                620  *
                621  * THE MAIN INTERRUPT HANDLER
                622  *
638D: A5 45     623  IRQ      LDA   $45        
638F: 48        624           PHA              
6390: 8A        625           TXA              
6391: 48        626           PHA              
6392: 98        627           TYA              
6393: 48        628           PHA              
6394: 20 7C 62  629           JSR   SERVEMOUSE ; DID THE MOUSE CAUSE THE IRQ?
6397: 90 03     630           BCC   :DOMOU     ; OR SEE IF THE CLOCK DID IT
6399: 4C 30 64  631           JMP   CHECKCLK   
639C: 20 A2 62  632  :DOMOU   JSR   READMOUSE  ; GET CURRENT MOUSE COORDS
639F: A5 07     633           LDA   BASEADDR+1 
63A1: 29 0F     634           AND   #$F        
63A3: AA        635           TAX              
63A4: BD 78 04  636           LDA   $478,X     
63A7: 85 1A     637           STA   MOUXPOS    
63A9: BD F8 04  638           LDA   $4F8,X     
63AC: 85 1C     639           STA   MOUYPOS    
63AE: BD 78 05  640           LDA   $578,X     
63B1: 85 1B     641           STA   MOUXPOS+1  
63B3: BD F8 05  642           LDA   $5F8,X     
63B6: 85 1D     643           STA   MOUYPOS+1  
63B8: BD 78 07  644           LDA   $778,X     
63BB: 85 1E     645           STA   MOUSTAT    
                646  * CHECK KEYBOARD
63BD: 2C 00 C0  647           BIT   KBD        
63C0: 10 0F     648           BPL   :NEXT      ; NO KEY PRESSED
63C2: AD 00 C0  649           LDA   KBD        
63C5: A6 4A     650           LDX   KINPTR     
63C7: 9D 00 02  651           STA   IN,X       
63CA: E6 4C     652           INC   KBUFCNT    
63CC: E6 4A     653           INC   KINPTR     
63CE: 8D 10 C0  654           STA   KBDSTRB    
63D1: A4 19     655  :NEXT    LDY   ACT        ; CURRENT PROCESS ID
63D3: 30 1B     656           BMI   IRQNEXT    ; BOOTSTRAP INITIAL PROCESS
63D5: AD F1 64  657           LDA   STKTAB     ; RUNNING PROCESS COUNT
63D8: F0 50     658           BEQ   IRQDONE    ; ONLY 1 PROCESS
63DA: A5 09     659  :CTR     LDA   CTR        
63DC: D9 F9 64  660           CMP   PRIOTAB,Y  ; HAS PROCESS REACHED ITS TIME LIMIT?
63DF: F0 04     661           BEQ   RESETCTR   ; YES, SO PREPARE TO SWITCH
63E1: E6 09     662           INC   CTR        
63E3: D0 45     663           BNE   IRQDONE    ; PROCESS NOT SWITCHED
63E5: A9 00     664  RESETCTR LDA   #$00       
63E7: 85 09     665           STA   CTR        
63E9: A4 19     666           LDY   ACT        
63EB: BA        667           TSX              
63EC: 8A        668           TXA              
63ED: 99 F2 64  669           STA   STKTAB+1,Y 
63F0: C8        670  IRQNEXT  INY              ; SWITCH TO NEXT PROCESS
63F1: C0 07     671           CPY   #MAXP       
63F3: F0 13     672           BEQ   :L2        ; GO BACK TO START OF PROCESS TABLE
63F5: B9 0E 65  673  :L1      LDA   PSTATTAB,Y ; GET PRCESS STATUS
63F8: C9 01     674           CMP   #PRUN      ; IS THIS A RUNNABLE PROCESS?
63FA: F0 22     675           BEQ   :CTXSW     ; YES, SO SWITCH IT IN
63FC: C9 FF     676           CMP   #PFREE     ; IS THIS PROCESS SLOT ACTIVE?
63FE: F0 F0     677           BEQ   IRQNEXT    ; YES, SO SKIP IT
6400: C9 03     678           CMP   #PSLEEP    ; IS PROCESS ASLEEP?
6402: F0 08     679           BEQ   :SLEEP     ; YES, SO DECREMENT ITS SLEEP TIMER
6404: C9 02     680           CMP   #PZOMB     ; IS THIS PROCESS A ZOMBIE?
6406: F0 E8     681           BEQ   IRQNEXT    ; YES, SO SKIP IT
6408: A0 00     682  :L2      LDY   #$00       ; LOOP BACK TO PROCESS 0
640A: F0 E9     683           BEQ   :L1        ; ALWAYS TAKEN
640C: B9 00 65  684  :SLEEP   LDA   SLPTAB,Y   
640F: F0 0D     685           BEQ   :CTXSW     ; PROCESS IS NOT ASLEEP
6411: AA        686           TAX              
6412: CA        687           DEX              
6413: 8A        688           TXA              
6414: 99 00 65  689           STA   SLPTAB,Y   
6417: D0 D7     690           BNE   IRQNEXT    ; PROCESS STILL HAS SLEEP TIME
6419: A9 01     691           LDA   #PRUN      ; PROCESS IS NOW RUNNABLE
641B: 99 0E 65  692           STA   PSTATTAB,Y ; SET THIS NEW STATUS
641E: BE F2 64  693  :CTXSW   LDX   STKTAB+1,Y 
6421: 9A        694           TXS              ; RESTORE THE PROCESS STACK POINTER
6422: 84 19     695           STY   ACT        ; ACTIVE PROCESS ID
6424: AD 30 C0  696           LDA   SPKR       
6427: AD 30 C0  697           LDA   SPKR       
642A: 68        698  IRQDONE  PLA              
642B: A8        699           TAY              
642C: 68        700           PLA              
642D: AA        701           TAX              
642E: 68        702           PLA              
642F: 40        703           RTI              
6430: A6 1F     704  CHECKCLK LDX   CLKSLOT    ; GET SLOT NUMBER OF CLOCK
6432: F0 7E     705           BEQ   CHECKSSC   ; NO CLOCK INSTALLED?
6434: BD 81 C0  706           LDA   $C081,X    ; IRQ FROM CLOCK?
6437: 10 79     707           BPL   CHECKSSC   ; NO, SO MOVE ON
6439: BD 80 C0  708           LDA   $C080,X    ; CLEAR THE IRQ FLAG
                709  * READ CLOCK DIGITS- HH:MM:SS
643C: A9 10     710           LDA   #$10       
643E: 9D 82 C0  711           STA   $C082,X    ; HOLD CLOCK
6441: A9 35     712           LDA   #$35       ; ADDRESS H10 DIGIT
6443: 9D 82 C0  713           STA   $C082,X    
6446: BD 80 C0  714           LDA   $C080,X    ; READ DIGIT
6449: 29 03     715           AND   #$03       ; MASK OUT BITS
644B: 09 B0     716           ORA   #$B0       ; CONVERT TO ASCII
644D: 8D 1C 65  717           STA   TIMESTOR   ; SAVE IT
6450: A9 34     718           LDA   #$34       ; H01
6452: 9D 82 C0  719           STA   $C082,X    
6455: BD 80 C0  720           LDA   $C080,X    ; READ DIGIT
6458: 29 0F     721           AND   #$0F       ; MASK OUT BITS
645A: 09 B0     722           ORA   #$B0       ; CONVERT TO ASCII
645C: 8D 1D 65  723           STA   TIMESTOR+1 ; SAVE IT
645F: A9 33     724           LDA   #$33       
6461: 9D 82 C0  725           STA   $C082,X     
6464: BD 80 C0  726           LDA   $C080,X    
6467: 29 07     727           AND   #$07       
6469: 09 B0     728           ORA   #$B0       
646B: 8D 1E 65  729           STA   TIMESTOR+2 
646E: A9 32     730           LDA   #$32       
6470: 9D 82 C0  731           STA   $C082,X    
6473: BD 80 C0  732           LDA   $C080,X    
6476: 29 0F     733           AND   #$0F       
6478: 09 B0     734           ORA   #$B0       
647A: 8D 1F 65  735           STA   TIMESTOR+3 
647D: A9 31     736           LDA   #$31       ; S10 DIGIT
647F: 9D 82 C0  737           STA   $C082,X    
6482: BD 80 C0  738           LDA   $C080,X    
6485: 29 07     739           AND   #$07       
6487: 09 B0     740           ORA   #$B0       
6489: 8D 20 65  741           STA   TIMESTOR+4 
648C: A9 30     742           LDA   #$30       ; S01 DIGIT
648E: 9D 82 C0  743           STA   $C082,X    
6491: BD 80 C0  744           LDA   $C080,X    
6494: 29 0F     745           AND   #$0F       
6496: 09 B0     746           ORA   #$B0       
6498: 8D 21 65  747           STA   TIMESTOR+5 
649B: A9 2F     748           LDA   #$2F       
649D: 9D 82 C0  749           STA   $C082,X    ; RELEASE CLOCK HOLD
                750  *
64A0: A9 0C     751           LDA   #$0C       
64A2: 9D 81 C0  752           STA   $C081,X    
64A5: A9 04     753           LDA   #$04       
64A7: 9D 83 C0  754           STA   $C083,X    
64AA: A9 2F     755           LDA   #$2F       ; REPRIME THE CLOCK FOR IRQ
64AC: 9D 82 C0  756           STA   $C082,X    
64AF: 4C 2A 64  757           JMP   IRQDONE    
                758  * SERVICE AN IRQ FROM THE SSC
64B2: A4 5B     759  CHECKSSC LDY   SSCSLOT    
64B4: F0 33     760           BEQ   NOIRQ      ; NO SSC INSTALLED?
64B6: B9 89 C0  761           LDA   SSTREG,Y   ; BIT 7 SET ON IRQ
64B9: 10 2E     762           BPL   NOIRQ      ; WASN'T SSC, SO MOVE ON
64BB: A8        763           TAY              
64BC: 29 08     764           AND   #$08       
64BE: F0 29     765           BEQ   NOIRQ      
64C0: 98        766           TYA              
64C1: 29 07     767           AND   #$07       ; ANY ERROR?
64C3: F0 0B     768           BEQ   :GET2      
64C5: A4 5B     769           LDY   SSCSLOT    ; BRANCH HERE ON ERROR
64C7: B9 88 C0  770           LDA   SRDREG,Y   
64CA: 20 E0 64  771           JSR   SSCWRITE   
64CD: 4C 2A 64  772           JMP   IRQDONE    
64D0: A4 5B     773  :GET2    LDY   SSCSLOT    ; NO RECEIVE ERROR
64D2: B9 88 C0  774           LDA   SRDREG,Y   
64D5: A4 58     775           LDY   SINPTR     
64D7: 91 56     776           STA   (SBUFPTR),Y 
64D9: E6 5A     777           INC   SBUFCNT    
64DB: E6 58     778           INC   SINPTR     
64DD: 4C 2A 64  779           JMP   IRQDONE    
                780  SSCWRITE                  
64E0: A4 58     781           LDY   SINPTR     
64E2: 91 56     782           STA   (SBUFPTR),Y  
64E4: E6 5A     783           INC   SBUFCNT    
64E6: E6 58     784           INC   SINPTR     
64E8: 60        785           RTS              
64E9: A9 BF     786  NOIRQ    LDA   #$BF       ; SPURIOUS INTERRUPT?
64EB: 20 ED FD  787           JSR   COUT       
64EE: 4C 2A 64  788           JMP   IRQDONE    
                789  *
64F1: 00 00 00  790  STKTAB   DS    MAXP+1     
64F4: 00 00 00 00 00 
64F9: 00 00 00  791  PRIOTAB  DS    MAXP       ; PROCESS PRIORITIES TABLE
64FC: 00 00 00 00 
6500: 00 00 00  792  SLPTAB   DS    MAXP       ; SLEEPING PROCESSES TABLE
6503: 00 00 00 00 
6507: 00 00 00  793  PPIDTAB  DS    MAXP       ; PARENT PROCESS ID TABLE
650A: 00 00 00 00 
650E: 00 00 00  794  PSTATTAB DS    MAXP       ; PROCESS STATUS TABLE
6511: 00 00 00 00 
6515: 00 00 00  795  ESTATTAB DS    MAXP       ; PROCESS EXIT STATUS TABLE
6518: 00 00 00 00 
                796  *
651C: 00 00 00  797  TIMESTOR DS    6          ; SYSTEM TIME- HH:MM:SS
651F: 00 00 00 
                798  *
6522: A6 5B     799  PROC6    LDX   SSCSLOT    ; IS THE SSC INSTALLED?
6524: F0 16     800           BEQ   :DONE      ; NO, SO EXIT
6526: 20 C3 62  801  :L       JSR   GETSSC     
6529: B0 0B     802           BCS   :L2        ; NO NEW DATA
652B: 09 80     803           ORA   #$80       ; SET HI-BIT FOR COUT
652D: 08        804           PHP              
652E: 78        805           SEI              
652F: 20 ED FD  806           JSR   COUT       
6532: 28        807           PLP              
6533: 4C 26 65  808           JMP   :L         
6536: 20 75 63  809  :L2      JSR   YIELD      ; ALLOW NEXT PROC TO RUN
6539: 4C 26 65  810           JMP   :L         
653C: A9 01     811  :DONE    LDA   #$01       ; EXIT IF NO SSC
653E: 20 D2 62  812           JSR   EXIT       
                813  *
6541: A6 1F     814  PROC5    LDX   CLKSLOT    ; IS THE CLOCK INSTALLED?
6543: F0 40     815           BEQ   :DONE      ; NO, SO EXIT
6545: 08        816  :PRINTIT PHP              
6546: 78        817           SEI              ; NO IRQ WHILE WE PRINT TIME
6547: AD 1C 65  818           LDA   TIMESTOR   ; GET HOURS DIGIT
654A: F0 31     819           BEQ   :SLEEP     ; NO CLOCK TIME YET?
654C: 20 ED FD  820           JSR   COUT       
654F: AD 1D 65  821           LDA   TIMESTOR+1 ; HOURS DIGIT
6552: 20 ED FD  822           JSR   COUT       
6555: A9 BA     823           LDA   #$BA       ; COLON
6557: 20 ED FD  824           JSR   COUT       
655A: AD 1E 65  825           LDA   TIMESTOR+2 ; MINUTES
655D: 20 ED FD  826           JSR   COUT       
6560: AD 1F 65  827           LDA   TIMESTOR+3 ; MINUTES
6563: 20 ED FD  828           JSR   COUT       
6566: A9 BA     829           LDA   #$BA       ; COLON
6568: 20 ED FD  830           JSR   COUT       
656B: AD 20 65  831           LDA   TIMESTOR+4 ; SECONDS
656E: 20 ED FD  832           JSR   COUT        
6571: AD 21 65  833           LDA   TIMESTOR+5 ; SECONDS
6574: 20 ED FD  834           JSR   COUT       
6577: A9 8D     835           LDA   #$8D       ; CR
6579: 20 ED FD  836           JSR   COUT       
657C: 28        837           PLP              ; RE-ENABLE IRQ
657D: A9 40     838  :SLEEP   LDA   #$40       ; SLEEP FOR 64 TICKS
657F: 20 5B 63  839           JSR   SLEEP      
6582: 4C 45 65  840           JMP   :PRINTIT   ; PRINT TIME AGAIN
6585: A9 01     841  :DONE    LDA   #$01       ; EXIT IF NO CLOCK
6587: 20 D2 62  842           JSR   EXIT       
                843  *
                844  PROC4                     
658A: A0 00     845           LDY   #$00       
658C: A2 00     846           LDX   #$00       
658E: 8A        847  :L1      TXA              
658F: 08        848           PHP              
6590: 78        849           SEI              
6591: 20 71 F8  850           JSR   SCRN       
6594: 28        851           PLP              
6595: 48        852           PHA              
6596: 68        853           PLA              
6597: C9 0F     854           CMP   #WHITE     
6599: D0 0C     855           BNE   :L2        
659B: A9 00     856           LDA   #BLACK     
659D: 08        857           PHP              
659E: 78        858           SEI              
659F: 20 64 F8  859           JSR   SETCOL     
65A2: 8A        860           TXA              ; VERTICAL POSITION IN A-REG
65A3: 20 00 F8  861           JSR   PLOT       
65A6: 28        862           PLP              
65A7: C8        863  :L2      INY              
65A8: C0 28     864           CPY   #$28       
65AA: D0 E2     865           BNE   :L1        
65AC: A0 00     866           LDY   #$00       
65AE: E8        867           INX              
65AF: E0 28     868           CPX   #$28       
65B1: D0 DB     869           BNE   :L1        
65B3: A0 00     870           LDY   #$00       
65B5: B9 CA 65  871  :MSGL    LDA   CLRMSG,Y   
65B8: F0 0B     872           BEQ   :MSGDONE   
65BA: 09 80     873           ORA   #$80       
65BC: 08        874           PHP              
65BD: 78        875           SEI              
65BE: 20 ED FD  876           JSR   COUT       
65C1: 28        877           PLP              
65C2: C8        878           INY              
65C3: D0 F0     879           BNE   :MSGL      
65C5: A9 01     880  :MSGDONE LDA   #$01       ; EXIT CODE
65C7: 20 D2 62  881           JSR   EXIT       ; TERMINATE THIS PROCESS
65CA: 43 4C 45  882  CLRMSG   ASC   'CLEAR'
65CD: 41 52 
65CF: 8D 00     883           HEX   8D00       
65D1: A5 1E     884  PROC3    LDA   MOUSTAT    
65D3: 10 17     885           BPL   :NEXT      
65D5: A5 1A     886           LDA   MOUXPOS    
65D7: 08        887           PHP              
65D8: 78        888           SEI               
65D9: 20 DA FD  889           JSR   PRBYTE     
65DC: A9 A0     890           LDA   #$A0       
65DE: 20 ED FD  891           JSR   COUT       
65E1: A5 1C     892           LDA   MOUYPOS    
65E3: 20 DA FD  893           JSR   PRBYTE     
65E6: A9 8D     894           LDA   #$8D       
65E8: 20 ED FD  895           JSR   COUT       
65EB: 28        896           PLP              
65EC: 20 75 63  897  :NEXT    JSR   YIELD      
65EF: 4C D1 65  898           JMP   PROC3      
                899  *
65F2: A2 27     900  PROC2    LDX   #$27       
65F4: A0 27     901           LDY   #$27       
65F6: A9 03     902           LDA   #$03       
65F8: 20 5B 63  903           JSR   SLEEP      
65FB: 08        904  :L1      PHP              
65FC: 78        905           SEI              
65FD: A9 02     906           LDA   #BLUE      
65FF: 20 64 F8  907           JSR   SETCOL     
6602: 8A        908           TXA              
6603: 20 00 F8  909           JSR   PLOT       
6606: 28        910           PLP              
6607: 20 75 63  911           JSR   YIELD      
660A: 88        912           DEY              
660B: 10 EE     913           BPL   :L1        
660D: A0 27     914           LDY   #$27       
660F: CA        915           DEX              
6610: 10 E9     916           BPL   :L1        
6612: A2 27     917           LDX   #$27       
6614: D0 E5     918           BNE   :L1        
                919  *
6616: A0 00     920  PROC1    LDY   #$00       
6618: A2 00     921           LDX   #$00       
661A: 08        922  :L1      PHP              
661B: 78        923           SEI              
661C: A9 01     924           LDA   #RED       
661E: 20 64 F8  925           JSR   SETCOL     
6621: 8A        926           TXA              
6622: 20 00 F8  927           JSR   PLOT       
6625: 28        928           PLP              
6626: 20 75 63  929           JSR   YIELD      
6629: C8        930           INY              
662A: C0 28     931           CPY   #$28       
662C: D0 EC     932           BNE   :L1        
662E: A0 00     933           LDY   #$00       
6630: A9 07     934           LDA   #$07       
6632: 20 5B 63  935           JSR   SLEEP      
6635: E8        936           INX              
6636: E0 28     937           CPX   #$28       
6638: D0 E0     938           BNE   :L1        
663A: A2 00     939           LDX   #$00       
663C: F0 DC     940           BEQ   :L1        
663E: 4C 16 66  941           JMP   PROC1      
                942  *
6641: 08        943  PROC0    PHP              
6642: 78        944           SEI              
6643: A9 00     945           LDA   #$00        
6645: A2 27     946           LDX   #$27       ; MAX X CLAMP
6647: 8D 78 04  947           STA   $478       
664A: 8E F8 04  948           STX   $4F8       
664D: 8D 78 05  949           STA   $578       
6650: 8D F8 05  950           STA   $5F8       
6653: 20 88 62  951           JSR   CLAMPMOUSE 
6656: A0 00     952           LDY   #$00       
6658: A9 01     953           LDA   #$01       
665A: A2 27     954           LDX   #$27       
665C: 8C 78 04  955           STY   $478       
665F: 8E F8 04  956           STX   $4F8       
6662: 8C 78 05  957           STY   $578       
6665: 8C F8 05  958           STY   $5F8       
6668: 20 88 62  959           JSR   CLAMPMOUSE 
666B: 20 96 62  960           JSR   HOMEMOUSE  
666E: 28        961           PLP              
666F: AD 53 C0  962           LDA   MIX        
6672: AD 50 C0  963           LDA   GR         
6675: 08        964           PHP              
6676: 78        965           SEI              
6677: 20 36 F8  966           JSR   CLRTOP     
667A: 28        967           PLP              
667B: A0 0B     968           LDY   #$0B       ; PROCESS PRIORITY
667D: A9 16     969           LDA   #<PROC1    
667F: A2 66     970           LDX   #>PROC1    
6681: 20 E1 61  971           JSR   NEWPROC    
6684: A0 06     972           LDY   #$06       
6686: A9 F2     973           LDA   #<PROC2    
6688: A2 65     974           LDX   #>PROC2    
668A: 20 E1 61  975           JSR   NEWPROC    
668D: A0 0B     976           LDY   #$0B       
668F: A9 D1     977           LDA   #<PROC3    
6691: A2 65     978           LDX   #>PROC3    
6693: 20 E1 61  979           JSR   NEWPROC    
6696: A0 01     980           LDY   #$01       ; LOW PRIO FOR CLOCK PRINT
6698: A9 41     981           LDA   #<PROC5    
669A: A2 65     982           LDX   #>PROC5    
669C: 20 E1 61  983           JSR   NEWPROC    
669F: A0 0E     984           LDY   #$0E       ; PRIO FOR SSC READER
66A1: A9 22     985           LDA   #<PROC6    
66A3: A2 65     986           LDX   #>PROC6    
66A5: 20 E1 61  987           JSR   NEWPROC    
66A8: 20 B3 62  988  :NEXT    JSR   GETCH      
66AB: B0 04     989           BCS   :PUSH      
66AD: C9 9B     990           CMP   #$9B       ; ESCAPE
66AF: F0 16     991           BEQ   :CLRIT     
66B1: 08        992  :PUSH    PHP              
66B2: 78        993           SEI              
66B3: A5 1E     994           LDA   MOUSTAT    ; CHECK BUTTON STATUS
66B5: 10 0C     995           BPL   :PULL      
66B7: A9 0F     996           LDA   #WHITE     
66B9: 20 64 F8  997           JSR   SETCOL     
66BC: A5 1C     998           LDA   MOUYPOS    
66BE: A4 1A     999           LDY   MOUXPOS    
66C0: 20 00 F8  1000          JSR   PLOT       
66C3: 28        1001 :PULL    PLP              
66C4: 4C A8 66  1002          JMP   :NEXT       
66C7: A0 04     1003 :CLRIT   LDY   #$04       ; PROCESS PRIORITY
66C9: A9 8A     1004          LDA   #<PROC4    
66CB: A2 65     1005          LDX   #>PROC4    
66CD: 20 E1 61  1006          JSR   NEWPROC    ; SPAWN THE CHILD PROCESS
66D0: 20 0E 63  1007          JSR   WAIT       ; AND WAIT FOR IT TO COMPLETE
66D3: 08        1008          PHP              
66D4: 78        1009          SEI              
66D5: AA        1010          TAX              ; MOVE TERM STATUS TO X-REG
66D6: 98        1011          TYA              ; MOVE PROC ID TO A-REG
66D7: 20 41 F9  1012          JSR   PRNTAX     
66DA: A9 8D     1013          LDA   #$8D       
66DC: 20 ED FD  1014          JSR   COUT       
66DF: 28        1015          PLP              
66E0: 4C A8 66  1016          JMP   :NEXT      


--End assembly, 1763 bytes, Errors: 0 


Symbol table - alphabetical order:

   ACT     =$19        BASEADDR=$06        BLACK   =$00        BLUE    =$02
   CHECKCLK=$6430      CHECKSSC=$64B2      CLAMPMOUSE=$6288      CLKID1  =$08
   CLKID2  =$78        CLKID3  =$B8        CLKID4  =$B2        CLKIDLOC1=$00
   CLKIDLOC2=$01        CLKIDLOC3=$0C        CLKIDLOC4=$FE        CLKSLOT =$1F
   CLRMSG  =$65CA      CLRTOP  =$F836      COUT    =$FDED      CTR     =$09
   DOSWARM =$03D0      ESTATTAB=$6515      EXIT    =$62D2      FINDCLOCK=$6085
   FINDSSC =$611B      GETCH   =$62B3      GETSSC  =$62C3      GR      =$C050
   HOMEMOUSE=$6296      IN      =$0200      INITCLK =$60E3      INITMOUSE=$6262
   INITSSC =$6181      IRQ     =$638D      IRQDONE =$642A      IRQLOC  =$03FE
   IRQNEXT =$63F0      KBD     =$C000      KBDSTRB =$C010      KBUFCNT =$4C
   KINPTR  =$4A        KOUTPTR =$4B        MAXP    =$07        MIX     =$C053
   MOUID1  =$38        MOUID2  =$18        MOUID3  =$01        MOUID4  =$20
   MOUID5  =$D6        MOUIDLOC1=$05        MOUIDLOC2=$07        MOUIDLOC3=$0B
   MOUIDLOC4=$0C        MOUIDLOC5=$FB        MOUSEJMP=$62AC      MOUSLOT =$08
   MOUSTAT =$1E        MOUXPOS =$1A        MOUYPOS =$1C        NEWPROC =$61E1
   NEWPROCTMP=$0A        NOCLKMSG=$6110      NOIRQ   =$64E9      NOMOUMSG=$607A
   PFREE   =$FF        PLOT    =$F800      PPIDTAB =$6507      PRBYTE  =$FDDA
   PRIOTAB =$64F9      PRNTAX  =$F941      PROC0   =$6641      PROC1   =$6616
   PROC2   =$65F2      PROC3   =$65D1      PROC4   =$658A      PROC5   =$6541
   PROC6   =$6522      PRUN    =$01        PSLEEP  =$03        PSTATTAB=$650E
   PZOMB   =$02        READMOUSE=$62A2      RED     =$01        RESETCTR=$63E5
   SBUFCNT =$5A        SBUFLOC =$9000      SBUFPTR =$56        SCMDREG =$C08A
   SCRN    =$F871      SCTLREG =$C08B      SERVEMOUSE=$627C      SETCOL  =$F864
   SETMOUSE=$626E      SINPTR  =$58        SLEEP   =$635B      SLPTAB  =$6500
   SOUTPTR =$59        SPKR    =$C030      SRDREG  =$C088      SRESET  =$C089
   SSCID1  =$38        SSCID2  =$18        SSCID3  =$01        SSCID4  =$31
   SSCID5  =$08        SSCLOC1 =$05        SSCLOC2 =$07        SSCLOC3 =$0B
   SSCLOC4 =$0C        SSCLOC5 =$FF        SSCSLOT =$5B        SSCWRITE=$64E0
   SSTREG  =$C089      STKTAB  =$64F1      SYSINIT =$61A8      TIMESTOR=$651C
   VBLINT  =$09        VBLON   =$624A      WAIT    =$630E      WAKEUP  =$634A
   WHITE   =$0F        YIELD   =$6375      YIELD2  =$637C   


Symbol table - numerical order:

   CLKIDLOC1=$00        BLACK   =$00        MOUID3  =$01        CLKIDLOC2=$01 
   SSCID3  =$01        PRUN    =$01        RED     =$01        PZOMB   =$02
   BLUE    =$02        PSLEEP  =$03        MOUIDLOC1=$05        SSCLOC1 =$05
   BASEADDR=$06        MOUIDLOC2=$07        MAXP    =$07        SSCLOC2 =$07
   CLKID1  =$08        MOUSLOT =$08        SSCID5  =$08        VBLINT  =$09
   CTR     =$09        NEWPROCTMP=$0A        MOUIDLOC3=$0B        SSCLOC3 =$0B
   MOUIDLOC4=$0C        CLKIDLOC3=$0C        SSCLOC4 =$0C        WHITE   =$0F
   MOUID2  =$18        SSCID2  =$18        ACT     =$19        MOUXPOS =$1A
   MOUYPOS =$1C        MOUSTAT =$1E        CLKSLOT =$1F        MOUID4  =$20
   SSCID4  =$31        MOUID1  =$38        SSCID1  =$38        KINPTR  =$4A
   KOUTPTR =$4B        KBUFCNT =$4C        SBUFPTR =$56        SINPTR  =$58
   SOUTPTR =$59        SBUFCNT =$5A        SSCSLOT =$5B        CLKID2  =$78
   CLKID4  =$B2        CLKID3  =$B8        MOUID5  =$D6        MOUIDLOC5=$FB
   CLKIDLOC4=$FE        SSCLOC5 =$FF        PFREE   =$FF        IN      =$0200
   DOSWARM =$03D0      IRQLOC  =$03FE      NOMOUMSG=$607A      FINDCLOCK=$6085
   INITCLK =$60E3      NOCLKMSG=$6110      FINDSSC =$611B      INITSSC =$6181
   SYSINIT =$61A8      NEWPROC =$61E1      VBLON   =$624A      INITMOUSE=$6262
   SETMOUSE=$626E      SERVEMOUSE=$627C      CLAMPMOUSE=$6288      HOMEMOUSE=$6296
   READMOUSE=$62A2      MOUSEJMP=$62AC      GETCH   =$62B3      GETSSC  =$62C3
   EXIT    =$62D2      WAIT    =$630E      WAKEUP  =$634A      SLEEP   =$635B
   YIELD   =$6375      YIELD2  =$637C      IRQ     =$638D      RESETCTR=$63E5
   IRQNEXT =$63F0      IRQDONE =$642A      CHECKCLK=$6430      CHECKSSC=$64B2
   SSCWRITE=$64E0      NOIRQ   =$64E9      STKTAB  =$64F1      PRIOTAB =$64F9
   SLPTAB  =$6500      PPIDTAB =$6507      PSTATTAB=$650E      ESTATTAB=$6515
   TIMESTOR=$651C      PROC6   =$6522      PROC5   =$6541      PROC4   =$658A
   CLRMSG  =$65CA      PROC3   =$65D1      PROC2   =$65F2      PROC1   =$6616
   PROC0   =$6641      SBUFLOC =$9000      KBD     =$C000      KBDSTRB =$C010
   SPKR    =$C030      GR      =$C050      MIX     =$C053      SRDREG  =$C088
   SSTREG  =$C089      SRESET  =$C089      SCMDREG =$C08A      SCTLREG =$C08B
   PLOT    =$F800      CLRTOP  =$F836      SETCOL  =$F864      SCRN    =$F871
   PRNTAX  =$F941      PRBYTE  =$FDDA      COUT    =$FDED   

[toc] | [prev] | [next] | [standalone]


#1415 — Re: Source Code for Multitasking Mouse Draw Demo v1.3

Fromgids.rs@sasktel.net
Date2014-12-19 15:24 -0800
SubjectRe: Source Code for Multitasking Mouse Draw Demo v1.3
Message-ID<11d71bea-89c2-4051-9f9a-432bc53c27d8@googlegroups.com>
In reply to#1414
On Thursday, 18 December 2014 13:57:11 UTC-6, D Finnigan  wrote:
> For the benefit of all Apple II users, the source code is hereby 
> surrendered into the public domain. I claim no copyright on the source code. 
> 
> Assembler used is Merlin. 
>


<snip>


With all these posts of interrupts and buffers and spooling has also renewed my interest of serial and parallel ports, So.

Just out of curiosity, does the SSC card have a Que register that lets one know if the SSC is ready to send, like the parallel cards do?

With parallel cards, I believe testing $C090 register let's one know when the printer is waiting for a character to be sent to it.

This brings up another question.  Is it my Epson printer that has a built in 1 kilobyte buffer, or is it the parallel printer card that has the buffer?

And does the SSC card possibly have a built in hardware buffer?  And how big it might be?


So many questions, so much to learn, so little time.

[toc] | [prev] | [next] | [standalone]


#1428 — Re: Source Code for Multitasking Mouse Draw Demo v1.3

Fromwssimms@gmail.com
Date2014-12-27 14:09 -0800
SubjectRe: Source Code for Multitasking Mouse Draw Demo v1.3
Message-ID<609cfdf3-d9eb-4902-bd7c-f153e36fb3ab@googlegroups.com>
In reply to#1415
The SSC doesn't have a buffer. With your printer the buffer is probably in the card. Buffered cards were very popular.

The SSC can be set to interrupt on character received and possibly on character sent, I don't remember about the send interrupt for sure. I always thought an SSC with a FIFO would have been a great enhancement.

[toc] | [prev] | [next] | [standalone]


#1429 — Re: Source Code for Multitasking Mouse Draw Demo v1.3

FromMichael J. Mahon <mjmahon@aol.com>
Date2014-12-27 17:36 -0600
SubjectRe: Source Code for Multitasking Mouse Draw Demo v1.3
Message-ID<1015006957441416023.265945mjmahon-aol.com@news.giganews.com>
In reply to#1428
<wssimms@gmail.com> wrote:
> The SSC doesn't have a buffer. With your printer the buffer is probably
> in the card. Buffered cards were very popular.
> 
> The SSC can be set to interrupt on character received and possibly on
> character sent, I don't remember about the send interrupt for sure. I
> always thought an SSC with a FIFO would have been a great enhancement.

Yes, it also offers a send interrupt. 
-- 
-michael - NadaNet 3.1 and AppleCrate II: http://home.comcast.net/~mjmahon

[toc] | [prev] | [next] | [standalone]


#1430 — Re: Source Code for Multitasking Mouse Draw Demo v1.3

FromD Finnigan <dog_cow@macgui.com>
Date2014-12-28 13:38 +0000
SubjectRe: Source Code for Multitasking Mouse Draw Demo v1.3
Message-ID<dog_cow-1419773906@macgui.com>
In reply to#1415
gids.rs wrote:
> On Thursday, 18 December 2014 13:57:11 UTC-6, D Finnigan  wrote:
>> For the benefit of all Apple II users, the source code is hereby 
>> surrendered into the public domain. I claim no copyright on the source
>> code.
>> 
>> Assembler used is Merlin. 
>>
> 
> 
> <snip>
> 
> 
> With all these posts of interrupts and buffers and spooling has also
> renewed my interest of serial and parallel ports, So.
> 
> Just out of curiosity, does the SSC card have a Que register that lets one
> know if the SSC is ready to send, like the parallel cards do?

Yes. Look at the code for my SSC thing that I posted recently, or consult
the appendix of the 1981 SSC ref manual.

> 
> This brings up another question.  Is it my Epson printer that has a built
> in 1 kilobyte buffer, or is it the parallel printer card that has the
> buffer?

Could be either one.

> 
> And does the SSC card possibly have a built in hardware buffer?  And how
> big it might be?
> 

Yes, but it is only enough for one character.

> So many questions, so much to learn, so little time.

Learning the SSC is not too bad because it has good Apple documentation. In
comparison, learning the TimeMaster II HO was much involved because of the
inferior Applied Engineering documentation. Had to do a lot of my own
reverse-engineering on that one!

-- 
]DF$
Apple II Book: http://macgui.com/newa2guide/
Usenet: http://macgui.com/usenet/  <-- get posts by email!
Apple II Web & Blog hosting: http://a2hq.com/

[toc] | [prev] | [next] | [standalone]


#1431 — Re: Source Code for Multitasking Mouse Draw Demo v1.3

Fromgids.rs@sasktel.net
Date2014-12-28 10:45 -0800
SubjectRe: Source Code for Multitasking Mouse Draw Demo v1.3
Message-ID<78931892-3e91-4ea0-ba54-e3e65c77fb55@googlegroups.com>
In reply to#1430
> > Just out of curiosity, does the SSC card have a Que register that lets one
> > know if the SSC is ready to send, like the parallel cards do?
> 
> Yes. Look at the code for my SSC thing that I posted recently, or consult
> the appendix of the 1981 SSC ref manual.


Your code is no help. You don't use the status reg.  And I have all the info of the SSC card.  Just trying to clarify some confusion.  What confused me was, I saw your code that shows a write to the status register.  Didn't see the read to the same register just above it right away.


> > This brings up another question.  Is it my Epson printer that has a built
> > in 1 kilobyte buffer, or is it the parallel printer card that has the
> > buffer?
> 
> Could be either one.
>
> 
> Yes, but it is only enough for one character.


Again, just trying to clarify some confusion since the screen hole information I have mentions an input buffer.


This is the info I have on the SSC card

Address   Register Bits Interpretation
$C081+n0  DIPSW1   0    SW1-6 is OFF when 1, ON when 0
          (SW1-x)  1    SW1-5 is OFF when 1, ON when 0
                   4-7  Same as above for SW1-4 through SW1-1
$C082+n0  DIPSW2   0    Clear to Send (CTS) is true when 0
          (SW2-x)  1-3  Same as above for SW2-5 through SW2-3
                   5,7  Same as above for SW2-2 and SW2-1
$C088+n0  TDREG    0-7  ACIA transmit register (write)
          RDREG    0-7  ACIA receive register (read)
$C089+n0  STATUS        ACIA status/reset register
		   0	Parity error detected when 1
		   1	Framing error detected when 1
		   2	Overrun detected when 1
		   3	ACIA receive register full when 1
		   4	ACIA transmit register empt when 1
		   5    Data Carrier Detect (DCD) true when 0
		   6	Data Set Ready (DSR) true when 0
		   7	IRQ has occured when 1
$C08A+n0   COMMAND	ACIA Command register (r/w)
		   0	DTR - enable (1) or disable (0) receiver and all IRQ
		   1	When 1 allow STATUS bit 3 to cause IRQ
		   2-3	Control transmit interrupt, RTS level and transmitter
		   4	0=normal mode for receiver, 1=echo mode-bit2,3 must be 0
		   5-7	Control Parity
$C08B+n0   Control	ACIA control register (r/w)
		   0-3	baud rate $00=16 x external clock
		   4	1=use baud rate generator; 0=use external clock (ns)
		   5-6	# of data bits
		   7	# of stop bits



and for the Screen Holes:


Super Serial Card
-----------------
$0478+n  1144+n  Delay: b0-1=FF b2-3=LF b4-5=CR b6-7=translate option
$04F8+n  1272+n  Accumulator for firmware's command processor
$0578+n  1400+n  b0-2=cmd mode b3-5=slot to ch to b6=lc b7=terminal/CR
$05F8+n  1528+n  b0-6=command byte b7=zap control commands
$0678+n  1656+n  Error: b0=parity b1=framing b2=overrun b3=carrier b5=error
$06F8+n  1784+n  Modem Mode: b0-2=screen slot b3-7=$Cs00 space entry point
                 Printer Mode: current printer width
$0778+n  1912+n  Modem Mode: input buffer
                 Printer Mode: current column
$07F8+n  2040+n  b0=auto LF b1=comm.mode b2=keyb inp b3=chk XOFF b4=Pascal
                 b5=ignore LF b6=enable lc/tabs b7=echo

[toc] | [prev] | [next] | [standalone]


#1432 — Re: Source Code for Multitasking Mouse Draw Demo v1.3

Fromwssimms@gmail.com
Date2014-12-28 15:14 -0800
SubjectRe: Source Code for Multitasking Mouse Draw Demo v1.3
Message-ID<278a7ba0-a1a2-4213-b0be-5d492e2d13a8@googlegroups.com>
In reply to#1431
Am Sonntag, 28. Dezember 2014 13:45:39 UTC-5 schrieb gid...@sasktel.net:
> Again, just trying to clarify some confusion since the screen hole information I have mentions an input buffer.

I assume that is the input buffer for the SSC firmware, where the commands you type are stored and are parsed.

[toc] | [prev] | [next] | [standalone]


#1434 — Re: Source Code for Multitasking Mouse Draw Demo v1.3

FromD Finnigan <dog_cow@macgui.com>
Date2014-12-29 18:13 +0000
SubjectRe: Source Code for Multitasking Mouse Draw Demo v1.3
Message-ID<dog_cow-1419876806@macgui.com>
In reply to#1431
gids.rs wrote:
>> > Just out of curiosity, does the SSC card have a Que register that lets
>> > one
>> > know if the SSC is ready to send, like the parallel cards do?
>> 
>> Yes. Look at the code for my SSC thing that I posted recently, or consult
>> the appendix of the 1981 SSC ref manual.
> 
> 
> Your code is no help. You don't use the status reg.

Look at the code, lines 204-207 in the SEND subroutine. It is commented.

Source code for Updated Super Serial Card IRQ FIFO Buffer

-- 
]DF$
Apple II Book: http://macgui.com/newa2guide/
Usenet: http://macgui.com/usenet/  <-- get posts by email!
Apple II Web & Blog hosting: http://a2hq.com/

[toc] | [prev] | [next] | [standalone]


#1438 — Re: Source Code for Multitasking Mouse Draw Demo v1.3

Fromgids.rs@sasktel.net
Date2014-12-29 13:14 -0800
SubjectRe: Source Code for Multitasking Mouse Draw Demo v1.3
Message-ID<3229e9f1-cd0b-4656-9db2-8ac97459a9d4@googlegroups.com>
In reply to#1434
> Look at the code, lines 204-207 in the SEND subroutine. It is commented.
> Source code for Updated Super Serial Card IRQ FIFO Buffer


Ok.  It's official.  I hate Google.  The small little writing that usually says "Show quoted text" says "show trimmed text" and lo and behold, there is the rest of your program.  Doing a search for SSTREG or $C089 obviously doesn't find hidden text.

You could have made my life easier by quoting line 758 to 779 of your listing.  I would have seen right away that I was missing some lines.  But that's not your job, right? :)

Everything is falling into place.  All is good.  No more questions.

Now, I just look forward to playing with it.

[toc] | [prev] | [next] | [standalone]


#1439 — Re: Source Code for Multitasking Mouse Draw Demo v1.3

FromD Finnigan <dog_cow@macgui.com>
Date2014-12-30 09:25 +0000
SubjectRe: Source Code for Multitasking Mouse Draw Demo v1.3
Message-ID<dog_cow-1419931563@macgui.com>
In reply to#1438
gids.rs wrote:
>> Look at the code, lines 204-207 in the SEND subroutine. It is commented.
>> Source code for Updated Super Serial Card IRQ FIFO Buffer
> 
> 
> Now, I just look forward to playing with it.
>

I can send you disk images of this later. Ask me at the end of January.

Btw, while I doubt we will ever have a general purpose multitasking OS for
8-bit Apple, this code (after some more improvements) can be used as a
framework for a multithreaded application or even... a game!

-- 
]DF$
Apple II Book: http://macgui.com/newa2guide/
Usenet: http://macgui.com/usenet/  <-- get posts by email!
Apple II Web & Blog hosting: http://a2hq.com/

[toc] | [prev] | [next] | [standalone]


#1440 — Re: Source Code for Multitasking Mouse Draw Demo v1.3

From"Bill Garber" <willy46pa@comcast.net>
Date2014-12-30 05:44 -0500
SubjectRe: Source Code for Multitasking Mouse Draw Demo v1.3
Message-ID<ANednYHdh5JoHD_JnZ2dnUVZ8vydnZ2d@giganews.com>
In reply to#1439
"D Finnigan" <dog_cow@macgui.com> wrote in 
message news:dog_cow-1419931563@macgui.com... 
> gids.rs wrote:
>>> Look at the code, lines 204-207 in the SEND 
>>> subroutine.  It is commented. Source code for 
>>> Updated Super Serial Card IRQ FIFO Buffer 
>> 
>> Now, I just look forward to playing with it. 
> 
> I can send you disk images of this later. 
> Ask me at the end of January. 
> 
> Btw, while I doubt we will ever have a general purpose 
> multitasking OS for 8-bit Apple, this code (after some 
> more improvements) can be used as a framework for 
> a multithreaded application or even... a game! 

How about once you have made all of the improvements, 
and at the end of January, you could simply offer up disk 
images of this on your awesome web site. 

Bill Garber - I love my 
C1 D0 D0 CC C5 A0 C9 C9 C7 D3 
http://www.sepa-electronics.com 

[toc] | [prev] | [next] | [standalone]


#1441 — Re: Source Code for Multitasking Mouse Draw Demo v1.3

FromD Finnigan <dog_cow@macgui.com>
Date2014-12-30 12:25 +0000
SubjectRe: Source Code for Multitasking Mouse Draw Demo v1.3
Message-ID<dog_cow-1419942329@macgui.com>
In reply to#1440
Bill Garber wrote:
> "D Finnigan" <dog_cow@macgui.com> wrote in 
> message news:dog_cow-1419931563@macgui.com... 
>> gids.rs wrote:
>>>> Look at the code, lines 204-207 in the SEND 
>>>> subroutine.  It is commented. Source code for 
>>>> Updated Super Serial Card IRQ FIFO Buffer 
>>> 
>>> Now, I just look forward to playing with it. 
>> 
>> I can send you disk images of this later. 
>> Ask me at the end of January. 
>> 
>> Btw, while I doubt we will ever have a general purpose 
>> multitasking OS for 8-bit Apple, this code (after some 
>> more improvements) can be used as a framework for 
>> a multithreaded application or even... a game! 
> 
> How about once you have made all of the improvements, 
> and at the end of January, you could simply offer up disk 
> images of this on your awesome web site. 

My awesome web site is not going to be around for much longer. People who
are interested can email me. Or better still, I can put the images on
Asimov, the only archive site that matters.


-- 
]DF$
Apple II Book: http://macgui.com/newa2guide/
Usenet: http://macgui.com/usenet/  <-- get posts by email!
Apple II Web & Blog hosting: http://a2hq.com/

[toc] | [prev] | [next] | [standalone]


#1442 — Re: Source Code for Multitasking Mouse Draw Demo v1.3

FromHugh Hood <hughhood@earthlink.net>
Date2014-12-30 08:03 -0600
SubjectRe: Source Code for Multitasking Mouse Draw Demo v1.3
Message-ID<D0C80CEE.2CA79%hughhood@earthlink.net>
In reply to#1441
David:

Your 'Spyglass' is pretty cool. I'll miss it, unless you've got another card
up your sleeve that you have yet to play.





Hugh Hood




in article dog_cow-1419942329@macgui.com, D Finnigan at dog_cow@macgui.com
wrote on 12/30/14 6:25 AM:

> 
> My awesome web site is not going to be around for much longer. People who
> are interested can email me. Or better still, I can put the images on
> Asimov, the only archive site that matters.
> 

[toc] | [prev] | [next] | [standalone]


#1444 — Re: Source Code for Multitasking Mouse Draw Demo v1.3

FromD Finnigan <dog_cow@macgui.com>
Date2014-12-30 16:57 +0000
SubjectRe: Source Code for Multitasking Mouse Draw Demo v1.3
Message-ID<dog_cow-1419958697@macgui.com>
In reply to#1442
Hugh Hood wrote:
> David:
> 
> Your 'Spyglass' is pretty cool. I'll miss it, unless you've got another
> card
> up your sleeve that you have yet to play.
> 

Spyglass: a lot of really great potential not being realized because the
Format Converter code behind it is a mess. :-(

It was supposed to be a mesh of object-oriented code so tightly arranged
that you could click through, for example, a ShrinkIt .SDK file containing a
disk image, to a BASIC file on that disk. Or a .PO disk image contaning a
.SHK archvie to a hi-res graphics screen.

As it stands, you can only go one level deep. This is also the reason why
the Apple II search engine project has stalled: the backend Format Converter
code is not ready to handle the demands.

-- 
]DF$
Apple II Book: http://macgui.com/newa2guide/
Usenet: http://macgui.com/usenet/  <-- get posts by email!
Apple II Web & Blog hosting: http://a2hq.com/

[toc] | [prev] | [next] | [standalone]


#1443 — Re: Source Code for Multitasking Mouse Draw Demo v1.3

From"Bill Garber" <willy46pa@comcast.net>
Date2014-12-30 11:48 -0500
SubjectRe: Source Code for Multitasking Mouse Draw Demo v1.3
Message-ID<xv-dnTwxVMzASj_JnZ2dnUVZ8u2dnZ2d@giganews.com>
In reply to#1441
"D Finnigan" <dog_cow@macgui.com> wrote in message 
news:dog_cow-1419942329@macgui.com... 
> Bill Garber wrote:
>> "D Finnigan" <dog_cow@macgui.com> wrote in 
>> message news:dog_cow-1419931563@macgui.com... 
>>> gids.rs wrote:
>>>>> Look at the code, lines 204-207 in the SEND 
>>>>> subroutine.  It is commented. Source code for 
>>>>> Updated Super Serial Card IRQ FIFO Buffer 
>>>> 
>>>> Now, I just look forward to playing with it. 
>>> 
>>> I can send you disk images of this later. 
>>> Ask me at the end of January. 
>>> 
>>> Btw, while I doubt we will ever have a general purpose 
>>> multitasking OS for 8-bit Apple, this code (after some 
>>> more improvements) can be used as a framework for 
>>> a multithreaded application or even... a game! 
>> 
>> How about once you have made all of the improvements, 
>> and at the end of January, you could simply offer up disk 
>> images of this on your awesome web site. 
> 
> My awesome web site is not going to be around for much 
> longer. People who are interested can email me. Or better 
> still, I can put the images on Asimov, the only archive site 
> that matters. 

Well, I don't hang on your site, but I do frequent it when google 
sends me a link to it, and I have downloaded from macgui.com 
more than I have from Asimov, so, I will miss it as well. 

Bill Garber - I love my 
C1 D0 D0 CC C5 A0 C9 C9 C7 D3 
http://www.sepa-electronics.com 

[toc] | [prev] | [next] | [standalone]


#1449 — Re: Source Code for Multitasking Mouse Draw Demo v1.3

FromMartin Doherty <martindoherty377@gmail.com>
Date2014-12-30 10:22 -0800
SubjectRe: Source Code for Multitasking Mouse Draw Demo v1.3
Message-ID<124d1fe8-363c-4beb-b16d-193576e683a3@googlegroups.com>
In reply to#1441
> My awesome web site is not going to be around for much longer. 

Oh noes, macgui.com is going away? When? Why? I'll be sorry to see it go too, I think you've been providing a great resource for both the Mac & Apple II communities. Asimov may be the greatest archive for disk images, but sites like yours offering forum posts, image galleries, and articles are a great complement to bare directories stuffed with inconsistenly-named files.

Martin

[toc] | [prev] | [next] | [standalone]


#1450 — Re: Source Code for Multitasking Mouse Draw Demo v1.3

FromD Finnigan <dog_cow@macgui.com>
Date2014-12-30 18:55 +0000
SubjectRe: Source Code for Multitasking Mouse Draw Demo v1.3
Message-ID<dog_cow-1419965765@macgui.com>
In reply to#1449
Martin Doherty wrote:
>> My awesome web site is not going to be around for much longer. 
> 
> Oh noes, macgui.com is going away? When? Why? I'll be sorry to see it go
> too, I think you've been providing a great resource for both the Mac &
> Apple II communities. Asimov may be the greatest archive for disk images,
> but sites like yours offering forum posts, image galleries, and articles
> are a great complement to bare directories stuffed with
> inconsistenly-named
> files.

Nothing is final yet. But Mac GUI takes enormous resources to operate, both
in terms of my time involvement, and the disk storage and bandwith. Already
I economize on that part by not hosting very many PDFs and other large
files. Every year until now there has been no question of whether or not the
site will continue. It was always "of course it will continue." But now it
seems like I will definitely need to downsize the site. What this downsizing
will look like, I don't know. But at the current way things are going, it
will have to happen some time.

Note, however, that I won't be quitting my Apple II hobby! :-)

-- 
]DF$
Apple II Book: http://macgui.com/newa2guide/
Usenet: http://macgui.com/usenet/  <-- get posts by email!
Apple II Web & Blog hosting: http://a2hq.com/

[toc] | [prev] | [next] | [standalone]


#1451 — Re: Source Code for Multitasking Mouse Draw Demo v1.3

FromMichael J. Mahon <mjmahon@aol.com>
Date2014-12-30 17:54 -0600
SubjectRe: Source Code for Multitasking Mouse Draw Demo v1.3
Message-ID<555746199441676034.985190mjmahon-aol.com@news.giganews.com>
In reply to#1450
D Finnigan <dog_cow@macgui.com> wrote:
> Martin Doherty wrote:
>>> My awesome web site is not going to be around for much longer. 
>> 
>> Oh noes, macgui.com is going away? When? Why? I'll be sorry to see it go
>> too, I think you've been providing a great resource for both the Mac &
>> Apple II communities. Asimov may be the greatest archive for disk images,
>> but sites like yours offering forum posts, image galleries, and articles
>> are a great complement to bare directories stuffed with
>> inconsistenly-named
>> files.
> 
> Nothing is final yet. But Mac GUI takes enormous resources to operate, both
> in terms of my time involvement, and the disk storage and bandwith. Already
> I economize on that part by not hosting very many PDFs and other large
> files. Every year until now there has been no question of whether or not the
> site will continue. It was always "of course it will continue." But now it
> seems like I will definitely need to downsize the site. What this downsizing
> will look like, I don't know. But at the current way things are going, it
> will have to happen some time.
> 
> Note, however, that I won't be quitting my Apple II hobby! :-)

Seems strange that disk space is an issue in the era of inexpensive 4TB
drives...
-- 
-michael - NadaNet 3.1 and AppleCrate II: http://home.comcast.net/~mjmahon

[toc] | [prev] | [next] | [standalone]


#1452 — Re: Source Code for Multitasking Mouse Draw Demo v1.3

FromD Finnigan <dog_cow@macgui.com>
Date2014-12-31 10:31 +0000
SubjectRe: Source Code for Multitasking Mouse Draw Demo v1.3
Message-ID<dog_cow-1420021931@macgui.com>
In reply to#1451
Michael J. Mahon wrote:
> 
> Seems strange that disk space is an issue in the era of inexpensive 4TB
> drives...

Sad, but true. Everyone's trying to make a profit...

[toc] | [prev] | [next] | [standalone]


Page 1 of 2  [1] 2  Next page →

Back to top | Article view | comp.sys.apple2.programmer


csiph-web