Curt Vendel Posted November 19, 2003 Share Posted November 19, 2003 Enjoy... ;************************************************ ; * ; EEPROM Write & Read Primitives * ; * ;************************************************ ; ; Hi-Score on-board-cartridge EEPROM primitives ; for use by Jaguar game cartridge developers. ; ; 128 bytes (accessable as 64 words) of non-volatile ; memory are available on Jaguar game cartridges to ; preserve Hi-scores or other game status. ; Data is retained for up to 10 years, and a minimum ; of 10,000 read/write cycles is assured, according to ; product literature. ; ; ; ; ; ; Programmer: Dave Staugas ; Atari, Sunnyvale ; [408] 745-8802 ; ; Last Update: 24-Sept-93 ; ; ; Equates needed that may already be defined in the JAGUAR.INC file.. ; JOY1 equ $f14000 ;this we'll use as our I/O base address GPIO_0 equ $f14800 ;General purpose I/O #0 GPIO_1 equ $f15000 ;General purpose I/O #1 ; ; Equates derived from the above ; to allow indirect with 16-bit displacement addressing ; GPIO_0of equ GPIO_0-JOY1 ;offset to GPIO_0 (when addr reg Ax -> JOY1) GPIO_1of equ GPIO_1-JOY1 ;offset to GPIO_1 (when addr reg Ax -> JOY1) ; ; Commands specific to the National Semiconductor NM93C14 ; ; 9-bit commands.. ; 876543210 eREAD equ %110000000 ;read from EEPROM eEWEN equ %100110000 ;Erase/write Enable eWRITE equ %101000000 ;Write selected register eEWDS equ %100000000 ;Erase/Write disable (default) ; ; ; DO (data out) - is read on bit0 of JOY1 ; DI (data in) - is written on bit0 of GPIO_0 ; CS (chip select) - is pulsed low by any access to GPIO_1 ; ; ;***************************************************************** ; ; Write a word to EEPROM ; ; entry: d0.w = data to be written ; d1.w = least signifigant 6 bits specify write address (0-63) ; ; exit: all preserved ; ; eewrite:: movem.l a0/d0-d4,-(sp) lea JOY1,a0 ;set ptr to EEPROM i/o addresses ; tst.w GPIO_1of(a0) ;strobe ChipSelect ; move.w #eEWEN,d2 ;erase/write enable command bsr out9bits ;send it to EEPROM ; tst.w GPIO_1of(a0) ;strobe ChipSelect ; andi.w #$3f,d1 ;force write addr to be legit (0-63) ori.w #eWRITE,d1 ;form WRITE command move.w d1,d2 bsr out9bits ;send it to EEPROM ; move.w d0,d2 ;get 16-bit data word to send bsr out16bit ; & send it ; tst.w GPIO_1of(a0) ;strobe ChipSelect ; nop ;1 us required after CS for status valid nop move.w #1,d2 wrwait: move.w (a0),d3 ;wait until write is complete and.w d2,d3 beq wrwait ; move.w #eEWDS,d2 ;get erase/write disable command bsr out9bits ;send it ; tst.w GPIO_1of(a0) ;strobe ChipSelect ; movem.l (sp)+,a0/d0-d4 rts ;we're done ; ; ; ;****************************************************** ; ; ; Read a word from EEPROM ; ; entry: d1.w = least signifigant 6 bits specify read address (0-63) ; ; exit: d0.w = data as read from EEPROM ; all other registers preserved ; eeread:: movem.l a0/d1-d4,-(sp) lea JOY1,a0 ;set ptr to EEPROM i/o address ; tst.w GPIO_1of(a0) ;strobe ChipSelect ; andi.w #$3f,d1 ;force legit read addr ori.w #eREAD,d1 move.w d1,d2 bsr out9bits ; moveq #0,d0 moveq #15,d3 ;pick up 17 bits (1st is dummy) inlp: tst.w GPIO_0of(a0) nop move.w (a0),d1 lsr.w #1,d1 addx.w d0,d0 nop nop nop nop nop nop dbra d3,inlp ; movem.l (sp)+,a0/d1-d4 rts ; ; ; ;************************************************************** ; ; Subordinate Routines needed by "eewrite" ; ; Serial data sent to device is written to DI, bit0 of GPIO_0 ; ; entry: ; a0 -> JOY1 ; d2.w = 16-bit data word to write ; ; exit: ; d2.w, d3.l destroyed ; out16bit: rol.w #1,d2 ;align 1st serial data bit (bit15) to bit0 moveq #15,d3 ;send 16 bits bra.s out9lp ; ; entry: ; a0 -> JOY1 ; d2.w = 9-bit command to write ; out9bits: rol.w #8,d2 ;align 1st serial data bit (bit8) to bit0 moveq #8,d3 ;send 9 out9lp: move.w d2,GPIO_0of(a0) ;write next bit nop nop nop ;delay next write nop nop nop rol.w #1,d2 ;adjust bit0 for next datum dbra d3,out9lp ;go for all 9 or all 16 rts ; ; Quote Link to comment Share on other sites More sharing options...
Tyrant Posted November 19, 2003 Share Posted November 19, 2003 Isnt that already in the dev manual / examples we've already got? I could be mistaken but Im sure the info on eeprom access was there already, tho perhaps without source. Quote Link to comment Share on other sites More sharing options...
Curt Vendel Posted November 19, 2003 Author Share Posted November 19, 2003 I figured, this seemed to be more well commented and it was the source, so it may be just a little more to help out.... Can't hurt, right? Curt Quote Link to comment Share on other sites More sharing options...
Tyrant Posted November 19, 2003 Share Posted November 19, 2003 No of course not, just curious as to why you were posting it, how it was different etc (without me having to look it up cause Im in a hurry off out ) Quote Link to comment Share on other sites More sharing options...
Matthias Posted November 19, 2003 Share Posted November 19, 2003 Hello! I figured, this seemed to be more well commented and it was the source, so it may be just a little more to help out.... Can't hurt, right? You are right, it's nice to see this code with comments, it's really sad that they removed them later. Bye! Matthias Quote Link to comment Share on other sites More sharing options...
Goochman Posted November 19, 2003 Share Posted November 19, 2003 Hello! I figured, this seemed to be more well commented and it was the source, so it may be just a little more to help out.... Can't hurt, right? You are right, it's nice to see this code with comments, it's really sad that they removed them later. Bye! Matthias Well, I can tell you working on some large software projects in the early 90's our Project leader would strip out all comments prior to stuff being send to the testing/production source safe enviroments due to storage savings. Every byte counts I guess Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.