mirror of
https://github.com/cc65/cc65.git
synced 2025-01-13 09:31:53 +00:00
New module eeprom.s
git-svn-id: svn://svn.cc65.org/cc65/trunk@3247 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
parent
4964382c67
commit
20d1cb2054
@ -34,6 +34,7 @@
|
||||
# Object files
|
||||
|
||||
OBJS = crt0.o \
|
||||
eeprom.o \
|
||||
framerate.o
|
||||
|
||||
#--------------------------------------------------------------------------
|
||||
|
255
libsrc/lynx/eeprom.s
Normal file
255
libsrc/lynx/eeprom.s
Normal file
@ -0,0 +1,255 @@
|
||||
;****************
|
||||
; CC65 Lynx Library
|
||||
;
|
||||
; Originally by Bastian Schick
|
||||
; http://www.geocities.com/SiliconValley/Byte/4242/lynx/
|
||||
;
|
||||
; Ported to cc65 (http://www.cc65.org) by
|
||||
; Shawn Jefferson, June 2004
|
||||
;
|
||||
; Several changes,
|
||||
; Ullrich von Bassewitz, 1004-10-14
|
||||
;
|
||||
;
|
||||
;****************
|
||||
;* EEPROM-routs
|
||||
;* for 93C46 (1024bit => 64 16-bit words)
|
||||
;*
|
||||
;* created : 11.05.95
|
||||
;* last modified :
|
||||
;*
|
||||
;* 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
|
||||
;*
|
||||
;*
|
||||
;* (c) 1995..97 Bastian Schick
|
||||
;* CS = A7 (18)
|
||||
;* CLK = A1 (11)
|
||||
;* DI/DO = AUDIN (32)
|
||||
;*
|
||||
;* And now how to contact the EEPROM :
|
||||
;*
|
||||
;* CARD
|
||||
;* PORT ----\/---- 93C46(SMD too)
|
||||
;* (18) A7 --------| CS |- +5V
|
||||
;* (11) A1 --------| CLK |- NC
|
||||
;* +---| DI |- NC
|
||||
;* (32) AUDIN ----+---| DO |- GND
|
||||
;* ----------
|
||||
;*
|
||||
;****************
|
||||
|
||||
|
||||
.export _lynx_eeprom_read
|
||||
.export _lynx_eeprom_write
|
||||
.export _lynx_eeprom_erase
|
||||
.import popa
|
||||
.importzp ptr1
|
||||
|
||||
.include "lynx.inc"
|
||||
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; EEPROM command list
|
||||
|
||||
EE_C_WRITE = $40
|
||||
EE_C_READ = $80
|
||||
EE_C_ERASE = $C0
|
||||
EE_C_EWEN = $30
|
||||
EE_C_EWDS = $00
|
||||
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; unsigned __fastcall__ lynx_eeprom_read (unsigned char cell);
|
||||
; /* Read a 16 bit word from the given address */
|
||||
;
|
||||
|
||||
_lynx_eeprom_read:
|
||||
and #$3f
|
||||
ora #EE_C_READ
|
||||
jsr EE_Send9Bit
|
||||
|
||||
lda #$a
|
||||
sta IODIR ; set AUDIN to Input
|
||||
|
||||
clc
|
||||
stz ptr1
|
||||
stz ptr1+1 ; Clear result
|
||||
ldy #16-1 ; Initialize bit counter
|
||||
@L1:
|
||||
; CLK = 1
|
||||
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 @L1
|
||||
|
||||
ldx #$1a
|
||||
stx IODIR ; set AUDIN for output
|
||||
;EE_SET_CS_LOW
|
||||
|
||||
ldx #3
|
||||
stx SYSCTL1
|
||||
dex
|
||||
stx SYSCTL1
|
||||
|
||||
lda ptr1
|
||||
ldy ptr1+1 ; Load result
|
||||
|
||||
rts
|
||||
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; unsigned __fastcall__ lynx_eeprom_erase (unsigned char cell);
|
||||
; /* Clear the word at the given address */
|
||||
;
|
||||
|
||||
_lynx_eeprom_erase:
|
||||
pha ; Save argument
|
||||
lda #EE_C_EWEN ; EWEN
|
||||
jsr EE_Send9Bit
|
||||
pla ; Restore cell
|
||||
and #$3f
|
||||
ora #EE_C_ERASE ; clear cell A
|
||||
jsr EE_Send9Bit
|
||||
bra EE_wait
|
||||
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; unsigned __fastcall__ lynx_eeprom_write (unsigned char cell, unsigned val);
|
||||
; /* Write the word at the given address */
|
||||
;
|
||||
|
||||
_lynx_eeprom_write:
|
||||
sta ptr1
|
||||
stx ptr1+1 ; Save val into ptr1
|
||||
lda #EE_C_EWEN ; EWEN
|
||||
jsr EE_Send9Bit
|
||||
jsr popa ; Get cell
|
||||
and #$3f ; Make valid range 0..63
|
||||
ora #EE_C_WRITE ; WRITE
|
||||
jsr EE_Send9Bit
|
||||
jsr EE_Send16Bit ; Send value in ptr1
|
||||
|
||||
EE_wait:
|
||||
; EE_SET_CS_HIGH
|
||||
|
||||
ldx #63
|
||||
EEloop:
|
||||
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
|
||||
|
||||
lda #EE_C_EWDS ; EWDS
|
||||
|
||||
; bra EE_Send9Bit ; fall into
|
||||
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; Send 8 bit value in A to eeprom
|
||||
|
||||
EE_Send9Bit:
|
||||
; EE_SET_CS_LOW
|
||||
ldx #3
|
||||
stx SYSCTL1
|
||||
dex
|
||||
stx SYSCTL1
|
||||
; EE_SET_CS_HIGH
|
||||
|
||||
ldx #63
|
||||
EEloop2:
|
||||
stz RCART0
|
||||
stz RCART0
|
||||
dex
|
||||
bpl EEloop2
|
||||
|
||||
ldy #8
|
||||
sec ; start bit
|
||||
ror A
|
||||
ror A
|
||||
ror A
|
||||
ror A ; bit 8 at pos. 4
|
||||
EEloop3:
|
||||
tax
|
||||
and #$10
|
||||
ora #$b
|
||||
sta IODAT
|
||||
; CLK = 1
|
||||
stz RCART0
|
||||
stz RCART0
|
||||
; CLK = 0
|
||||
stz RCART0
|
||||
stz RCART0
|
||||
txa
|
||||
rol A
|
||||
dey
|
||||
bpl EEloop3
|
||||
|
||||
lda #$b ; fnr neue EEPROMs
|
||||
sta IODAT
|
||||
|
||||
rts
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; Send 16 bit value in ptr1 to eeprom
|
||||
|
||||
EE_Send16Bit:
|
||||
lda ptr1+1
|
||||
|
||||
ror A
|
||||
ror ptr1
|
||||
ror A
|
||||
ror ptr1
|
||||
ror A
|
||||
ror ptr1
|
||||
|
||||
ldy #15
|
||||
EEloop4:
|
||||
tax
|
||||
and #$10
|
||||
ora #$b
|
||||
sta IODAT
|
||||
; CLK = 1
|
||||
stz RCART0
|
||||
stz RCART0
|
||||
; CLK = 0
|
||||
stz RCART0
|
||||
stz RCART0
|
||||
txa
|
||||
rol ptr1
|
||||
rol A
|
||||
dey
|
||||
bpl EEloop4
|
||||
|
||||
; EE_SET_CS_LOW
|
||||
ldx #3
|
||||
stx SYSCTL1
|
||||
dex
|
||||
stx SYSCTL1
|
||||
|
||||
lda #$b ; fnr neue EEPROMs
|
||||
sta IODAT
|
||||
|
||||
rts
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user