' ' Program: FOX SRAM Expansion Module #2 ' Author: (c) 2008 by A Fox Consulting & Design ' http://www.afox-consulting.com ' Date: 01/28/2008 ' ' Playing with 8k x 8 Serialized 6264 SRAM circuit ' 5 mins 30 secs to execute on a BS2 (99.3 bytes/sec). ' 1 min 54 sec to execute on a BS2p (287.4 bytes/sec). ' {$STAMP BS2} ' {$PBASIC 2.5} ' -----[ I/O Definitions ]------------------------------------------------- _SDL PIN 0 ' Serial data latch: 0 = Load, 1 = Hold/Read _SDO PIN 1 ' Serial Out (to mem circuit SIN) _SCL PIN 2 ' Serial Clock _SDI PIN 3 ' Serial In (to mem circuit SOUT) _WR PIN 4 ' Memory write Enable _RD PIN 5 ' Memory read Enable ' -----[ Constants ]------------------------------------------------------- BlockSize CON 1024 RAMChipSize CON 8192 ' -----[ Variables ]------------------------------------------------------- block VAR Byte offset VAR Word AddrBase VAR Word wrdAddr VAR Word test VAR Nib outVal VAR Byte inVal VAR Byte fails VAR Word ' Number of failed writes/block passes VAR Byte ' Number of good blocks ' -----[ Initialization ]-------------------------------------------------- Setup: HIGH _WR HIGH _RD HIGH _SCL HIGH _SDO DEBUG CLS,"Oh, look! We have a serialized SRAM memory module.", CR, "Let's test it to see how big it is!",CR,CR ' -----[ Program Code ]---------------------------------------------------- Main: fails = 0 passes = 0 wrdAddr = 0 FOR block = 0 TO (RAMChipSize/BlockSize)-1 AddrBase = block*BlockSize fails = 0 DEBUG "TESTING BANK ", DEC block," ... " FOR test = 0 TO 3 ' use four patterns wrdAddr = AddrBase LOOKUP test, [$FF, $AA, $55, $00], outVal FOR offset = 0 TO BlockSize - 1 GOSUB Write_Byte GOSUB Read_Byte IF (inVal <> outVal) THEN fails = fails + 1 wrdAddr = wrdAddr + 1 NEXT DEBUG "-" NEXT DEBUG " (",DEC4 AddrBase,"-",DEC4 wrdAddr-1,") " IF fails = 0 THEN DEBUG "OK",CR passes = passes + 1 ELSE DEBUG "BAD",CR ENDIF NEXT DEBUG CR, CR, "Done! ", DEC (passes * BlockSize), " BYTES SRAM AVAILABLE." END ' -----[ Subroutines ]----------------------------------------------------- Write_Byte: LOW _SDL ' Set 74299's for LOAD mode SHIFTOUT _SDO, _SCL, LSBFIRST, [OutVal, wrdAddr.BYTE1, wrdAddr.BYTE0] PULSOUT _WR, 1 ' Write byte to SRAM chip RETURN Read_Byte: LOW _SDL ' Set 74299's for LOAD mode SHIFTOUT _SDO, _SCL, LSBFIRST, [wrdAddr.BYTE1, wrdAddr.BYTE0] HIGH _SDL ' Set address hold and data load LOW _RD ' Read byte from SRAM chip PULSOUT _SCL, 1 ' Load 74299 with data HIGH _RD LOW _SDL ' Set 74299's for LOAD mode SHIFTIN _SDI, _SCL, LSBPRE, [InVal] RETURN