Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.sys.apple2.programmer > #1412
| 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> |
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 | Next — Previous in thread | Find similar
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