void __fastcall__ lynx_eeprom_erase (unsigned char cell);
/* Clear the word at the given address */
+unsigned __fastcall__ lynx_eeread (unsigned cell);
+/* Read a 16 bit word from the given address 93C46 93C66 or 93C86*/
+
+unsigned __fastcall__ lynx_eewrite (unsigned cell, unsigned val);
+/* Write the word at the given address 93C46 93C66 or 93C86*/
+
/*****************************************************************************/
+/*****************************************************************************/
+/* Sprites */
+/*****************************************************************************/
+
+
+
+#define SPRCTL0_1_bit_per_pixel 0
+#define SPRCTL0_2_bits_per_pixel 0x40
+#define SPRCTL0_3_bits_per_pixel 0x80
+#define SPRCTL0_4_bits_per_pixel 0xc0
+#define SPRCTL0_h_flip 0x20
+#define SPRCTL0_v_flip 0x10
+#define SPRCTL0_shadow 7
+#define SPRCTL0_xor_shadow 6
+#define SPRCTL0_non_collide 5
+#define SPRCTL0_normal 4
+#define SPRCTL0_boundary 3
+#define SPRCTL0_boundary_shadow 2
+#define SPRCTL0_background_no_coll 1
+#define SPRCTL0_background_shadow 0
+
+#define SPRCTL1_literal 0x80
+#define SPRCTL1_hsize_vsize_strech_tilt 0x30
+#define SPRCTL1_hsize_vsize_strech 0x20
+#define SPRCTL1_hsize_vsize 0x10
+#define SPRCTL1_no_palette 0x08
+#define SPRCTL1_skip_sprite 0x04
+#define SPRCTL1_start_drawing_up 0x02
+#define SPRCTL1_start_drawing_left 0x01
+
+#define SPRCOLL_dont_collide 0x20
+#define SPRCOLL_number_0_3 0x00
+
/* End of lynx.h */
#endif
ctype.o \
defdir.o \
eeprom.o \
+ eeprom46.o \
+ eeprom66.o \
+ eeprom86.o \
exec.o \
exehdr.o \
extzp.o \
--- /dev/null
+;***************
+; EEPROM-routines
+; for 93C46 (128 bytes as 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_eeread_93c46
+ .export _lynx_eewrite_93c46
+ .import popax
+ .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_eeread_93c46(unsigned char cell);
+; /* Read a 16 bit word from the given address */
+;
+_lynx_eeread_93c46:
+ and #$3f
+ ora #EE_C_READ
+ jsr EE_Send9Bit
+ 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
+EEloop1:
+; 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 EEloop1
+
+ ldx #$1a
+ stx IODIR ; set AUDIN for output
+;EE_SET_CS_LOW
+
+ ldx #3
+ stx SYSCTL1
+ dex
+ stx SYSCTL1
+
+ rts
+
+;***************
+; write word to EEPROM
+; void __fastcall__ lynx_eewrite_93c46(unsigned int addr, unsigned int val);
+_lynx_eewrite_93c46:
+ sta ptr1
+ stx ptr1+1
+ lda #EE_C_EWEN
+ jsr EE_Send9Bit
+ jsr popax
+ and #$3f
+ ora #EE_C_WRITE
+ jsr EE_Send9Bit
+ jsr EE_Send16Bit ; Sends ptr1 that contains val
+
+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
+; bra EE_Send9Bit ; fall into
+;***************
+; send A via I2C
+; A,Y destroyed
+;***************
+EE_Send9Bit:
+; EE_SET_CS_LOW
+ ldy #3
+ sty SYSCTL1
+ dey
+ sty SYSCTL1
+; EE_SET_CS_HIGH
+
+ ldy #63
+EEloop2:
+ stz RCART0
+ stz RCART0
+ dey
+ 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
+ rts
+;***************
+; send ptr1 to EEPROM
+EE_Send16Bit:
+ lda ptr1+1
+
+ ror A
+ ror ptr1
+ ror A
+ ror ptr1
+ ror A
+ ror ptr1
+
+ ldy #15
+EEloop5:
+ 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 EEloop5
+
+; EE_SET_CS_LOW
+ ldx #3
+ stx SYSCTL1
+ dex
+ stx SYSCTL1
+ rts
+
--- /dev/null
+;***************
+; EEPROM-routines
+; for 93C66 (512 bytes as 256 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
+; 2010 93c66 support B. Spruck
+; 2011 modified to suit cc65 environment Karri Kaksonen
+;
+; (c) 1995..97 Bastian Schick
+; CS = A7 (18)
+; CLK = A1 (11)
+; DI/DO = AUDIN (32)
+;
+;And now how to contact the EEPROM :
+;
+;CARD
+;PORT ----\/---- 93C66(SMD too)
+;(18) A7 --------| CS |- +5V
+;(11) A1 --------| CLK |- NC
+; +---| DI |- NC
+;(32) AUDIN ----+---| DO |- GND
+; ----------
+
+ .export _lynx_eeread_93c66
+ .export _lynx_eewrite_93c66
+ .import popax
+ .importzp ptr1
+
+ .include "lynx.inc"
+
+; -------------------
+; EEPROM command list
+EE_C_WRITE = $14
+EE_C_READ = $18
+EE_C_ERASE = $1C
+EE_C_EWEN = $13
+EE_C_EWEN2 = $FF ;; C0 schould be enough
+EE_C_EWDS = $10
+EE_C_EWDS2 = $00
+
+;**************
+; Only lower byte in A is used for address
+; unsigned int __fastcall__ lynx_eeread_93c66(unsigned int addr);
+_lynx_eeread_93c66:
+ ldx #EE_C_READ
+ jsr EE_Send11Bit
+ 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
+EEloop1:
+; 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 EEloop1
+
+ ldx #$1a
+ stx IODIR ; set AUDIN for output
+;EE_SET_CS_LOW
+
+ ldx #3
+ stx SYSCTL1
+ dex
+ stx SYSCTL1
+
+ rts
+
+;***************
+; write word to EEPROM
+; void __fastcall__ lynx_eewrite_93c66(unsigned int addr, unsigned int val);
+_lynx_eewrite_93c66:
+ sta ptr1
+ stx ptr1+1
+ ldx #EE_C_EWEN
+ lda #EE_C_EWEN2
+ jsr EE_Send11Bit
+ jsr popax
+ ldx #EE_C_WRITE
+ jsr EE_Send11Bit
+ jsr EE_Send16Bit ; Sends ptr1 that contains val
+
+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
+ ldx #EE_C_EWDS
+ lda #EE_C_EWDS2
+; bra EE_Send11Bit ; fall into
+;***************
+; send A via I2C
+; A,Y destroyed
+EE_Send11Bit:
+; EE_SET_CS_LOW
+ ldy #3
+ sty SYSCTL1
+ dey
+ sty SYSCTL1
+; EE_SET_CS_HIGH
+
+ ldy #63
+EEloop2:
+ stz RCART0
+ stz RCART0
+ dey
+ bpl EEloop2
+
+ pha
+ txa ;; Ok erstmal x abarbeiten und A sichern
+ ldy #2 ; 3 times
+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
+
+ 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
+
+ ora #$b
+ sta IODAT
+; CLK = 1
+ stz RCART0
+ stz RCART0
+; CLK = 0
+ stz RCART0
+ stz RCART0
+ txa
+ rol A
+ dey
+ bpl EEloop4
+ rts
+
+;***************
+; send ptr1 to EEPROM
+EE_Send16Bit:
+ lda ptr1+1
+
+ ror A
+ ror ptr1
+ ror A
+ ror ptr1
+ ror A
+ ror ptr1
+
+ ldy #15
+EEloop5:
+ 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 EEloop5
+
+; EE_SET_CS_LOW
+ ldx #3
+ stx SYSCTL1
+ dex
+ stx SYSCTL1
+ rts
+
--- /dev/null
+;***************
+; EEPROM-routs
+; for 93C86 (2048 bytes as 1024 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
+; 2010 93c66 support B. Spruck
+; 2010 93c86 support B. Spruck
+; 2011 modified to suit cc65 environment Karri Kaksonen
+;
+; (c) 1995..97 Bastian Schick
+; CS = A7 (18)
+; CLK = A1 (11)
+; DI/DO = AUDIN (32)
+;
+;And now how to contact the EEPROM :
+;
+;CARD
+;PORT ----\/---- 93C86(SMD too)
+;(18) A7 --------| CS |- +5V
+;(11) A1 --------| CLK |- NC
+; +---| DI |- NC
+;(32) AUDIN ----+---| DO |- GND
+; ----------
+
+ .export _lynx_eeread_93c86
+ .export _lynx_eewrite_93c86
+ .import popax
+ .importzp ptr1
+
+ .include "lynx.inc"
+
+; -------------------
+; EEPROM command list
+EE_C_WRITE = $14
+EE_C_READ = $18
+EE_C_ERASE = $1C
+EE_C_EWEN = $13
+EE_C_EWEN2 = $FF ;; C0 schould be enough
+EE_C_EWDS = $10
+EE_C_EWDS2 = $00
+
+;**************
+; 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
+
+;***************
+; 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
+EEloop1:
+; 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 EEloop1
+
+ ldx #$1a
+ stx IODIR ; set AUDIN for output
+;EE_SET_CS_LOW
+
+ ldx #3
+ stx SYSCTL1
+ dex
+ stx SYSCTL1
+
+ 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
+
+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
+ 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
+; EE_SET_CS_HIGH
+
+ ldy #63
+EEloop2:
+ 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
+; CLK = 1
+ 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
+EEloop4:
+ tax
+ and #$10
+
+ ora #$b
+ sta IODAT
+; CLK = 1
+ stz RCART0
+ stz RCART0
+; CLK = 0
+ stz RCART0
+ stz RCART0
+ txa
+ rol A
+ dey
+ bpl EEloop4
+ rts
+
+;***************
+; send ptr1 to EEPROM
+EE_Send16Bit:
+ lda ptr1+1
+
+ ror A
+ ror ptr1
+ ror A
+ ror ptr1
+ ror A
+ ror ptr1
+
+ ldy #15
+EEloop5:
+ 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 EEloop5
+
+; EE_SET_CS_LOW
+ ldx #3
+ stx SYSCTL1
+ dex
+ stx SYSCTL1
+ rts
+