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


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

Source code for Updated Super Serial Card IRQ FIFO buffer

From D Finnigan <dog_cow@macgui.com>
Newsgroups comp.sys.apple2.programmer
Subject Source code for Updated Super Serial Card IRQ FIFO buffer
Date 2014-12-17 19:01 +0000
Organization A noiseless patient Spider
Message-ID <ssc-fifo-irq-source-df-16Dec14@macgui.com> (permalink)
References <dog_cow-1418842623@macgui.com>

Show all headers | View raw


I hereby surrender the following source code into the public domain. 
I claim no copyright on this source code. It is free for everyone for all time. 

The assembler used is Merlin. 


                1    ********************************
                2    *
                3    *       FIFO BUFFER
                4    * INTENDED FOR USE WITH SSC
                5    *
                6    * D. FINNIGAN  -- 30 JUNE 2014
                7    *            UPDATED 16 DEC 14
                8    ********************************
                9    *
                10            ORG   $2000      
                11   *
                12   BUFLOC   EQU   $9000      ; MEMORY LOCATION OF BUFFER
                13   BUFPTR   EQU   $06        ; TWO BYTES BASE ADDRESS
                14   INPTR    EQU   $08        ; INCOMING DATA POINTER (FOR WRITES)
                15   OUTPTR   EQU   $09        ; OUTGOING DATA POINTER (FOR READS)
                16   BUFCNT   EQU   $0A        ; BUFFER CHARACTER COUNTER
                17   SSCSLOT  EQU   $0B        ; SSC SLOT AS $N0
                18   *
                19   RDREG    EQU   $C088      ; READ DATA REGISTER (READ)
                20   STREG    EQU   $C089      ; STATUS REGISTER (READ)
                21   RESET    EQU   $C089      ; SOFTWARE RESET (WRITE)
                22   CMDREG   EQU   $C08A      ; COMMAND REGISTER (R/W)
                23   CTLREG   EQU   $C08B      ; CONTROL REGISTER (R/W)
                24   *
                25   DOSWARM  EQU   $3D0       
                26   IRQLOC   EQU   $3FE       
                27   HOME     EQU   $FC58      
                28   COUT     EQU   $FDED      
                29   KBD      EQU   $C000      
                30   KBDSTRB  EQU   $C010      
                31   *
                32   SSCID1   EQU   $38        
                33   SSCID2   EQU   $18        
                34   SSCID3   EQU   $01        
                35   SSCID4   EQU   $31        
                36   SSCID5   EQU   $08        
                37   SSCLOC1  EQU   $05        
                38   SSCLOC2  EQU   $07        
                39   SSCLOC3  EQU   $0B        
                40   SSCLOC4  EQU   $0C        
                41   SSCLOC5  EQU   $FF        
                42   *
                43   START                     
2000: 58        44            CLI              
2001: 08        45            PHP              
2002: 78        46            SEI              
                47   * FIND SSC
2003: A9 00     48            LDA   #$00       
2005: 85 06     49            STA   BUFPTR     
2007: A9 C8     50            LDA   #$C8       
2009: 85 07     51            STA   BUFPTR+1   
200B: A2 08     52            LDX   #$08       
200D: CA        53   :LOOP1   DEX              
200E: F0 33     54            BEQ   :NOSSC     
2010: C6 07     55            DEC   BUFPTR+1   
2012: A0 05     56            LDY   #SSCLOC1   
2014: B1 06     57            LDA   (BUFPTR),Y  
                              ===== Page 2 =====
 
2016: C9 38     58            CMP   #SSCID1    
2018: D0 F3     59            BNE   :LOOP1     
201A: A0 07     60            LDY   #SSCLOC2   
201C: B1 06     61            LDA   (BUFPTR),Y 
201E: C9 18     62            CMP   #SSCID2    
2020: D0 EB     63            BNE   :LOOP1     
2022: A0 0B     64            LDY   #SSCLOC3   
2024: B1 06     65            LDA   (BUFPTR),Y 
2026: C9 01     66            CMP   #SSCID3    
2028: D0 E3     67            BNE   :LOOP1     
202A: A0 0C     68            LDY   #SSCLOC4   
202C: B1 06     69            LDA   (BUFPTR),Y 
202E: C9 31     70            CMP   #SSCID4    
2030: D0 DB     71            BNE   :LOOP1     
2032: A0 FF     72            LDY   #SSCLOC5   
2034: B1 06     73            LDA   (BUFPTR),Y 
2036: C9 08     74            CMP   #SSCID5    
2038: D0 D3     75            BNE   :LOOP1     
203A: 8A        76            TXA              ; SLOT NUMBER IN X
203B: 0A        77            ASL              
203C: 0A        78            ASL              
203D: 0A        79            ASL              
203E: 0A        80            ASL              
203F: 85 0B     81            STA   SSCSLOT    
2041: D0 18     82            BNE   :80COL     ; ALWAYS TAKEN
2043: A2 00     83   :NOSSC   LDX   #$00       
2045: BD 53 20  84   :NOSSC2  LDA   :NOSSCM,X  
2048: 20 ED FD  85            JSR   COUT       
204B: E8        86            INX              
204C: E0 07     87            CPX   #$07       
204E: D0 F5     88            BNE   :NOSSC2    
2050: 4C D0 03  89            JMP   DOSWARM    
2053: 8D CE CF  90   :NOSSCM  HEX   8DCECFA0D3D3C38D 
2056: A0 D3 D3 C3 8D 
                91   *
205B: 20 00 C3  92   :80COL   JSR   $C300      ; ACTIVATE 80-COLS
205E: 20 58 FC  93            JSR   HOME       ; CLEAR SCREEN
2061: 20 A9 20  94            JSR   INIT       
2064: A9 E7     95            LDA   #<IRQ      
2066: 8D FE 03  96            STA   IRQLOC     
2069: A9 20     97            LDA   #>IRQ      
206B: 8D FF 03  98            STA   IRQLOC+1   
206E: 20 D2 20  99            JSR   SSCINIT    
2071: 28        100           PLP              ; INTERRUPTS ON
2072: 20 C3 20  101  :L       JSR   READ       
2075: B0 03     102           BCS   :L2        ; NO NEW DATA
2077: 20 ED FD  103           JSR   COUT       
207A: AD 00 C0  104  :L2      LDA   KBD        
207D: 10 F3     105           BPL   :L         ; NO KEY PRESSED
207F: 8D 10 C0  106           STA   KBDSTRB    
2082: 29 7F     107           AND   #$7F       ; KILL THE HI-BIT
2084: 20 23 21  108           JSR   SEND       
2087: C9 0D     109           CMP   #$0D       ; WAS IT A CARRIAGE RETURN?
2089: F0 0C     110           BEQ   :CR        
208B: C9 7F     111           CMP   #$7F       ; WAS IT A DELETE?
208D: F0 11     112           BEQ   :DEL       
208F: 09 80     113           ORA   #$80       ; SET THE HI-BIT FOR DISPLAY 
                              ===== Page 3 =====
 
2091: 20 ED FD  114  :OUT     JSR   COUT       
2094: 4C 72 20  115           JMP   :L         
2097: A9 0A     116  :CR      LDA   #$0A       ; SEND LINE FEED
2099: 20 23 21  117           JSR   SEND       
209C: A9 8D     118           LDA   #$8D       ; GET THE CR BACK
209E: 30 F1     119           BMI   :OUT       ; AND PUT IT ON THE SCREEN
20A0: A9 08     120  :DEL     LDA   #$08       ; SEND BACKSPACE
20A2: 20 23 21  121           JSR   SEND       
20A5: A9 88     122           LDA   #$88       ; GET THE BS BACK
20A7: 30 E8     123           BMI   :OUT       ; AND PUT IT ON THE SCREEN
                124  *
                125  INIT                      
20A9: A9 00     126           LDA   #<BUFLOC   
20AB: 85 06     127           STA   BUFPTR     
20AD: A9 90     128           LDA   #>BUFLOC   
20AF: 85 07     129           STA   BUFPTR+1   
20B1: A9 00     130           LDA   #$00       
20B3: 85 08     131           STA   INPTR      
20B5: 85 09     132           STA   OUTPTR     
20B7: 85 0A     133           STA   BUFCNT     
20B9: 60        134           RTS              
                135  *
                136  WRITE                     
20BA: A4 08     137           LDY   INPTR      
20BC: 91 06     138           STA   (BUFPTR),Y 
20BE: E6 0A     139           INC   BUFCNT     
20C0: E6 08     140           INC   INPTR      
20C2: 60        141           RTS              
                142  *
                143  READ                      
20C3: 38        144           SEC              
20C4: A5 0A     145           LDA   BUFCNT     
20C6: F0 09     146           BEQ   :DONE      
20C8: A4 09     147           LDY   OUTPTR     
20CA: B1 06     148           LDA   (BUFPTR),Y 
20CC: C6 0A     149           DEC   BUFCNT     
20CE: E6 09     150           INC   OUTPTR     
20D0: 18        151           CLC              
20D1: 60        152  :DONE    RTS              
                153  *
                154  SSCINIT                   
20D2: A4 0B     155           LDY   SSCSLOT    ; GET SLOT $N0
20D4: A9 00     156           LDA   #$00       
20D6: 99 89 C0  157           STA   RESET,Y    
20D9: A9 1E     158           LDA   #$1E       ; 1 STOP, 8 DATA, 9600 BAUD
20DB: 99 8B C0  159           STA   CTLREG,Y   
20DE: A9 09     160           LDA   #$09       ; ENABLE IRQ, NO PARITY
20E0: 99 8A C0  161           STA   CMDREG,Y   
20E3: B9 88 C0  162           LDA   RDREG,Y    
20E6: 60        163           RTS              
                164  *
                165  IRQ                       
20E7: A5 45     166           LDA   $45        
20E9: 48        167           PHA              
20EA: 98        168           TYA              
20EB: 48        169           PHA              
20EC: A4 0B     170           LDY   SSCSLOT     
                              ===== Page 4 =====
 
20EE: B9 89 C0  171           LDA   STREG,Y    
20F1: 30 04     172           BMI   :GET       ; BIT 7 SET ON IRQ
20F3: 68        173  :DONE    PLA              
20F4: A8        174           TAY              
20F5: 68        175           PLA              
20F6: 40        176           RTI              
20F7: A8        177  :GET     TAY              
20F8: 29 08     178           AND   #$08       
20FA: F0 F7     179           BEQ   :DONE      
20FC: 98        180           TYA              
20FD: 29 07     181           AND   #$07       ; ANY ERROR?
20FF: F0 0F     182           BEQ   :GET2      
2101: A4 0B     183           LDY   SSCSLOT    
2103: B9 88 C0  184           LDA   RDREG,Y    
2106: 20 BA 20  185           JSR   WRITE      
2109: A9 3F     186           LDA   #'?        
210B: 20 BA 20  187           JSR   WRITE      
210E: D0 E3     188           BNE   :DONE      
2110: A4 0B     189  :GET2    LDY   SSCSLOT    
2112: B9 88 C0  190           LDA   RDREG,Y    
2115: 09 80     191           ORA   #$80       ; SET HI-BIT
2117: A4 08     192           LDY   INPTR      
2119: 91 06     193           STA   (BUFPTR),Y 
211B: E6 0A     194           INC   BUFCNT     
211D: E6 08     195           INC   INPTR      
211F: 68        196           PLA              
2120: A8        197           TAY              
2121: 68        198           PLA              
2122: 40        199           RTI              
                200  *
                201  SEND                      
2123: AA        202           TAX              ; SAVE OUT BYTE IN X
2124: A4 0B     203           LDY   SSCSLOT    
2126: B9 89 C0  204  :L1      LDA   STREG,Y    ; CLEAR TO SEND?
2129: 29 70     205           AND   #$70       
212B: C9 10     206           CMP   #$10       ; BIT 4 IS SET WHEN OK
212D: D0 F7     207           BNE   :L1        
212F: 98        208           TYA              
2130: 09 89     209           ORA   #$89       ; ADDRESS ACIA
2132: A8        210           TAY              
2133: 8A        211           TXA              ; GET OUT BYTE AGAIN
2134: 99 FF BF  212           STA   $BFFF,Y    ; SEND TO TDREG
2137: 60        213           RTS              ; BYTE IS LEFT IN A-REG


--End assembly, 312 bytes, Errors: 0 


Symbol table - alphabetical order:

   BUFCNT  =$0A        BUFLOC  =$9000      BUFPTR  =$06        CMDREG  =$C08A
   COUT    =$FDED      CTLREG  =$C08B      DOSWARM =$03D0      HOME    =$FC58
   INIT    =$20A9      INPTR   =$08        IRQ     =$20E7      IRQLOC  =$03FE
   KBD     =$C000      KBDSTRB =$C010      OUTPTR  =$09        RDREG   =$C088
   READ    =$20C3      RESET   =$C089      SEND    =$2123      SSCID1  =$38
   SSCID2  =$18        SSCID3  =$01        SSCID4  =$31        SSCID5  =$08
   SSCINIT =$20D2      SSCLOC1 =$05        SSCLOC2 =$07        SSCLOC3 =$0B 
                              ===== Page 5 =====
 
   SSCLOC4 =$0C        SSCLOC5 =$FF        SSCSLOT =$0B     ?  START   =$2000
   STREG   =$C089      WRITE   =$20BA   


Symbol table - numerical order:

   SSCID3  =$01        SSCLOC1 =$05        BUFPTR  =$06        SSCLOC2 =$07
   INPTR   =$08        SSCID5  =$08        OUTPTR  =$09        BUFCNT  =$0A
   SSCSLOT =$0B        SSCLOC3 =$0B        SSCLOC4 =$0C        SSCID2  =$18
   SSCID4  =$31        SSCID1  =$38        SSCLOC5 =$FF        DOSWARM =$03D0
   IRQLOC  =$03FE   ?  START   =$2000      INIT    =$20A9      WRITE   =$20BA
   READ    =$20C3      SSCINIT =$20D2      IRQ     =$20E7      SEND    =$2123
   BUFLOC  =$9000      KBD     =$C000      KBDSTRB =$C010      RDREG   =$C088
   STREG   =$C089      RESET   =$C089      CMDREG  =$C08A      CTLREG  =$C08B
   HOME    =$FC58      COUT    =$FDED   

== END ==

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


Thread

Super Serial Card IRQ FIFO buffer D Finnigan <dog_cow@macgui.com> - 2014-12-09 20:40 +0000
  Source code for Super Serial Card IRQ FIFO buffer D Finnigan <dog_cow@macgui.com> - 2014-12-09 20:45 +0000
    Re: Source code for Super Serial Card IRQ FIFO buffer gids.rs@sasktel.net - 2014-12-10 13:07 -0800
      Re: Source code for Super Serial Card IRQ FIFO buffer D Finnigan <dog_cow@macgui.com> - 2014-12-10 21:35 +0000
        Re: Source code for Super Serial Card IRQ FIFO buffer gids.rs@sasktel.net - 2014-12-15 08:40 -0800
          Re: Source code for Super Serial Card IRQ FIFO buffer D Finnigan <dog_cow@macgui.com> - 2014-12-17 18:53 +0000
  Re: Super Serial Card IRQ FIFO buffer ol.sc@web.de (Oliver Schmidt) - 2014-12-13 23:19 +0000
    Re: Super Serial Card IRQ FIFO buffer D Finnigan <dog_cow@macgui.com> - 2014-12-17 18:53 +0000
  Updated Super Serial Card IRQ FIFO buffer D Finnigan <dog_cow@macgui.com> - 2014-12-17 18:56 +0000
    Source code for Updated Super Serial Card IRQ FIFO buffer D Finnigan <dog_cow@macgui.com> - 2014-12-17 19:01 +0000

csiph-web