Close

Added Banked SRAM

A project log for OSI SD Card Operating System (OSISDOS)

Ohio Scientific / UK101 SD Card based Operating System under Multicomp FPGA Computer

land-boardscomland-boards.com 07/25/2020 at 14:480 Comments

The EP2C5-DB has an external 128 KB SRAM but the design only uses 40KB. The 40KB limitation is due to the original address map which places BASIC in ROM starting at $A000. It might be possible to move the BASIC, but probably not worth the effort. I doubt there's any code out there that uses more than 40KB.

Open Memory Map Addresses

There's two open address ranges from $C000 to $CFFF and $E000 to $EFFF. When I tried putting SRAM into the $Cxxx range the board did not boot. But when I put SRAM into the $Exxx range the board booted fine. I wrote a little program to test the expansion SRAM and it worked well.

 100 REM TEST UPPER MEMORY
 110 REM UPPER MEMORY IS 4KB FROM $E000-$EFFF (57344-61439 DEC)
 120 S=57344
 130 E=61439
 200 REM FILL MEMORY
 210 P=0
 220 FOR A=S TO E
 230 POKE A,P
 240 P=P+1
 250 P=P AND 255
 260 NEXT A
 300 REM VERIFY FILLED MEMORY
 310 X=0
 320 FOR A=S TO E
 330 P=PEEK(A)
 340 IF P<>X GOTO 500
 350 X=X+1
 360 X=X AND 255
 370 NEXT A
 380 END
 500 PRINT"ERROR"
 510 END

Making a Banked RAM

I thought it might be interesting to use the unused 64KB of SRAM as a banked SRAM. The 4KB section at $Exxx would allow for 16 banks of 4KB each. Although BASIC doesn't support the RAM as program space it still could be used for storing data for the OSISDOS. And this was a nice diversion from being stuck with the SD card read problems (last log entry).

In the original design, the A16 line from the EP2C5 FPGA to the SRAM is always set to 0. To add banking the A16 line needs to get set to 1 when the CPU address starts with $Exxx. Address lines A15..A12 then come from a bank register for accesses to 0xE****. The bank register is mapped to the I/O space. 

Wrote a simple test program to verify that different data is written into each bank:

 100 REM TEST BANKS
 110 REM UPPER MEMORY IS 4KB FROM $E000-$EFFF (57344-61439 DEC)
 120 S=57344:REM START OF SRAM BANK
 130 E=61439:REM END OF SRAM BANK
 140 B=61445:REM BANK SELECT REGISTER
 150 FOR V=0 TO 15:REM CHECK ALL 16 BANKS
 160 POKE B,V:REM WRITE TO BANK REGISTER
 170 POKE S,V:REM WRITE THE BANK NUMBER TO FIRST SRAM LOCATION
 180 NEXT V
 200 FOR V=0 TO 15:REM CHECK ALL 16 BANKS
 210 POKE B,V:REM WRITE TO BANK REGISTER
 220 R=PEEK(S):REM READ BACK THE SRAM
 230 IF R<>V GOTO 300: COMPARE TO VALUE WRITTEN
 230 NEXT V
 240 PRINT "PASSED"
 250 END
 300 PRINT "ERROR"

 Took a bit to get it working but it does now work.  This much SRAM would have been unimaginable back in the day.

Discussions