; 16.02.96 leaner (thanks to Harry)
; 12.03.96 test for busy after write and erase (well, Harry ;)) )
; 22.08.97 ported to ra65 for use with cc65
-; 02.12.97 added xref for the new ra65
+; 02.12.97 added xref for the new ra65
; 2010 93c66 support B. Spruck
; 2010 93c86 support B. Spruck
; 2011 modified to suit cc65 environment Karri Kaksonen
;(32) AUDIN ----+---| DO |- GND
; ----------
- .export _lynx_eeread_93c86
- .export _lynx_eewrite_93c86
- .import popax
- .importzp ptr1
+ .export _lynx_eeread_93c86
+ .export _lynx_eewrite_93c86
+ .import popax
+ .importzp ptr1
- .include "lynx.inc"
+ .include "lynx.inc"
; -------------------
; EEPROM command list
; Only lower byte in A is used for address
; unsigned int __fastcall__ lynx_eeread_93c86(unsigned int addr);
_lynx_eeread_93c86:
- pha
- txa
- ora #EE_C_READ
- tax
- pla
- jsr EE_Send13Bit
- jsr EE_Read16Bit
- lda ptr1
- ldx ptr1+1
- rts
+ pha
+ txa
+ ora #EE_C_READ
+ tax
+ pla
+ jsr EE_Send13Bit
+ jsr EE_Read16Bit
+ lda ptr1
+ ldx ptr1+1
+ rts
;***************
; reads EEPROM-word to ptr1
; A,Y destroyed
EE_Read16Bit:
- lda #$a
- sta IODIR ; set AUDIN to Input
- clc
- stz ptr1
- stz ptr1+1
- ldy #15
+ lda #$a
+ sta IODIR ; set AUDIN to Input
+ clc
+ stz ptr1
+ stz ptr1+1
+ ldy #15
EEloop1:
; CLK = 1
- stz RCART0
- stz RCART0
+ stz RCART0
+ stz RCART0
; CLK = 0
- stz RCART0
- stz RCART0
-
- lda IODAT
- and #$10 ; mask bit
- adc #$f0 ; C=1 if A=$10
- rol ptr1
- rol ptr1+1 ; shifts 0 to Carry
- dey
- bpl EEloop1
-
- ldx #$1a
- stx IODIR ; set AUDIN for output
+ stz RCART0
+ stz RCART0
+
+ lda IODAT
+ and #$10 ; mask bit
+ adc #$f0 ; C=1 if A=$10
+ rol ptr1
+ rol ptr1+1 ; shifts 0 to Carry
+ dey
+ bpl EEloop1
+
+ ldx #$1a
+ stx IODIR ; set AUDIN for output
;EE_SET_CS_LOW
- ldx #3
- stx SYSCTL1
- dex
- stx SYSCTL1
+ ldx #3
+ stx SYSCTL1
+ dex
+ stx SYSCTL1
- rts
+ rts
;***************
; write word to EEPROM
; void __fastcall__ lynx_eewrite_93c86(unsigned int addr, unsigned int val);
_lynx_eewrite_93c86:
- sta ptr1
- stx ptr1+1
- ldx #EE_C_EWEN
- lda #EE_C_EWEN2
- jsr EE_Send13Bit
- jsr popax
- pha
- txa
- ora #EE_C_WRITE
- tax
- pla
- jsr EE_Send13Bit
- jsr EE_Send16Bit ; Sends ptr1 that contains val
+ sta ptr1
+ stx ptr1+1
+ ldx #EE_C_EWEN
+ lda #EE_C_EWEN2
+ jsr EE_Send13Bit
+ jsr popax
+ pha
+ txa
+ ora #EE_C_WRITE
+ tax
+ pla
+ jsr EE_Send13Bit
+ jsr EE_Send16Bit ; Sends ptr1 that contains val
EE_wait:
; EE_SET_CS_HIGH
- ldx #63
+ ldx #63
EEloop:
- stz RCART0
- stz RCART0
- dex
- bpl EEloop
-
- lda #$0A
- sta IODIR ; AUDIN to input
- lda #$10
+ stz RCART0
+ stz RCART0
+ dex
+ bpl EEloop
+
+ lda #$0A
+ sta IODIR ; AUDIN to input
+ lda #$10
EE_wait1:
- bit IODAT ; 'til ready :D0-read is /D0-written
- beq EE_wait1
- lda #$1a ; AUDIN to output
- sta IODIR
- ldx #EE_C_EWDS
- lda #EE_C_EWDS2
-; bra EE_Send13Bit ; fall into
+ bit IODAT ; 'til ready :D0-read is /D0-written
+ beq EE_wait1
+ lda #$1a ; AUDIN to output
+ sta IODIR
+ ldx #EE_C_EWDS
+ lda #EE_C_EWDS2
+; bra EE_Send13Bit ; fall into
;***************
; send A via I2C
; A,Y destroyed
EE_Send13Bit:
; EE_SET_CS_LOW
- ldy #3
- sty SYSCTL1
- dey
- sty SYSCTL1
+ ldy #3
+ sty SYSCTL1
+ dey
+ sty SYSCTL1
; EE_SET_CS_HIGH
- ldy #63
+ ldy #63
EEloop2:
- stz RCART0
- stz RCART0
- dey
- bpl EEloop2
-
- pha
- txa ;; Ok erstmal x abarbeiten und A sichern
- ldy #4 ; 5 times
+ stz RCART0
+ stz RCART0
+ dey
+ bpl EEloop2
+
+ pha
+ txa ;; Ok erstmal x abarbeiten und A sichern
+ ldy #4 ; 5 times
EEloop3:
- tax
- and #$10
- ora #$b
- sta IODAT
+ tax
+ and #$10
+ ora #$b
+ sta IODAT
; CLK = 1
- stz RCART0
- stz RCART0
+ stz RCART0
+ stz RCART0
; CLK = 0
- stz RCART0
- stz RCART0
- txa
- rol A
- dey
- bpl EEloop3
-
- ldy #7 ; 8 times
- pla ;; jetzt kommt a an die reihe
-
- ror A
- ror A
- ror A ; bit 7 at pos. 4
+ stz RCART0
+ stz RCART0
+ txa
+ rol A
+ dey
+ bpl EEloop3
+
+ ldy #7 ; 8 times
+ pla ;; jetzt kommt a an die reihe
+
+ ror A
+ ror A
+ ror A ; bit 7 at pos. 4
EEloop4:
- tax
- and #$10
+ tax
+ and #$10
- ora #$b
- sta IODAT
+ ora #$b
+ sta IODAT
; CLK = 1
- stz RCART0
- stz RCART0
+ stz RCART0
+ stz RCART0
; CLK = 0
- stz RCART0
- stz RCART0
- txa
- rol A
- dey
- bpl EEloop4
- rts
+ stz RCART0
+ stz RCART0
+ txa
+ rol A
+ dey
+ bpl EEloop4
+ rts
;***************
; send ptr1 to EEPROM
EE_Send16Bit:
- lda ptr1+1
+ lda ptr1+1
- ror A
- ror ptr1
- ror A
- ror ptr1
- ror A
- ror ptr1
+ ror A
+ ror ptr1
+ ror A
+ ror ptr1
+ ror A
+ ror ptr1
- ldy #15
+ ldy #15
EEloop5:
- tax
- and #$10
- ora #$b
- sta IODAT
+ tax
+ and #$10
+ ora #$b
+ sta IODAT
; CLK = 1
- stz RCART0
- stz RCART0
+ stz RCART0
+ stz RCART0
; CLK = 0
- stz RCART0
- stz RCART0
- txa
- rol ptr1
- rol A
- dey
- bpl EEloop5
+ stz RCART0
+ stz RCART0
+ txa
+ rol ptr1
+ rol A
+ dey
+ bpl EEloop5
; EE_SET_CS_LOW
- ldx #3
- stx SYSCTL1
- dex
- stx SYSCTL1
- rts
+ ldx #3
+ stx SYSCTL1
+ dex
+ stx SYSCTL1
+ rts