BSX/doc/detailed-memory-map.org

7.3 KiB
Raw Permalink Blame History

I/O is at $00:df00 - $00:dfff, and is always mapped in.

note Any RAM that might also be mapped to this range is ignored.

ROM0 logic

ROM0 low if CS4 XOR CS7 low.

Booted Memory Map

$00:0000-$00:deff : SRAM todo where will direct page & stack be? $00:df00-$00:dfff : I/O $df00-$00:df1f : VERA $df20 : PD4 (data register, port 4) $df21 : PD5 (data register, port 5) $df22 : PD6 (data register, port 6) $df23 : PD7 (data register, port 7) $df24 : PDD4 (direction register, port 4) $df25 : PDD5 (direction register, port 5) $df26 : PDD6 (direction register, port 6) $df27 : PCS7 (port 7 chip select)

—- —————– ———- ———————————————————————–
bit name address booted val notes
—- —————– ———- ———————————————————————–
7 CS7 $c0:0000-$ff:ffff 1 Used with CS4 to generate ROM0
6 CS6 $40:0000-$bf:ffff 1 Wired to cartridge and expansion ports.
5 CS5 $00:0000-$3f:ffff 1 Enables SRAM
4 CS4 $00:8000-$00:ffff 0 Used during boot, disabled afterwards. Used with CS7 to generate ROM0.
3 CS3 0 Used as GPIO (which port?)
2 CS2 0 Used as GPIO (which port?)
1 CS1 $00:dfc0-$00:dfff 1 0 = PIB SRAM, 1 = Clock Port
0 CS0 $00:df00-$00:df1f 1 0 = GPIO control, 1 = VERA
—- —————– ———- ———————————————————————–

$df28-df3f : unused / reserved $df40 : BCR (bus control register) bit 0: 0: address & data pins are GPIO 1: address & data pins are buses. note we always have this set to 1. $df41 : SSCR (system speed control register) $df42 : TCR (timer control register) $df43 : TER (timer enable register) $df44 : TIFR (timer interrupt flag register) $df45 : EIFR (edge interrupt enable register) $df46 : TIER (timer interrupt enable register) $df47 : EIER (edge interrupt enable register) $df48 : UIFR (UART interrupt flag register) $df49 : UIER (UART interrupt enable register) $df4a-df4f : unused / reserved [$df50-df6f : timer register memory map] $df5a : T5LL (Timer 5 Latch Low) $df5b : T5LH (Timer 5 Latch High) $df6a : T5CL (Timer 5 Counter Low) $df6b : T5CH (Timer 5 Counter High) [$df70-dfbf : Communication Registers (2.5.1)] todo not sure what we use from here yet. $dfc0-dfff : Clock Port (64 bytes) $00:e000-$00:ffff : SRAM $01:0000-$3f:ffff : SRAM $04:0000-$bf:ffff : Cartridge & Expansion $c0:0000-$ff:ffff : ROM

timers & special IRQs

todo irne64 - !VIRQ todo irqt5

cpu pins to signals note: !xyz should be interpreted as xyz with overline

—- ———- ————– ————– ———– ———– ————- ———–
pin# pin name signal (I/O) control bit signal cb 0 signal cb 1 direction reg data reg
—- ———- ————– ————– ———– ———– ————- ———–
5 p4.5 (P45) MISO (I) PIBER0 P45 PIRS0 PDD4 $df24:5 PD4 $df20:5
6 p4.6 (P46) SD_CD (I) PIBER0 P46 PIRS1 PDD4 $df24:6 PD4 $df20:6
7 p4.7 (P47) SD_WP (I) PIBER0 P47 PIRS2 PDD4 $df24:7 PD4 $df20:7
8 p5.0 (P50) SNES_CLK (O) PIBER0 P50 PID0 PDD5 $df25:0 PD5 $df21:0
9 p5.1 (P51) SNES_LATCH (O) PIBER0 P51 PID1 PDD5 $df25:1 PD5 $df21:1
10 p5.2 (P52) SNES_DATA0 (I) PIBER0 P52 PID2 PDD5 $df25:2 PD5 $df21:2
11 p5.3 (P53) SNES_DATA1 (I) PIBER0 P53 PID3 PDD5 $df25:3 PD5 $df21:3
12 p5.4 (P54) SNES_DATA2 (I) PIBER0 P54 PID4 PDD5 $df25:4 PD5 $df21:4
13 p5.5 (P55) SNES_DATA3 (I) PIBER0 P55 PID5 PDD5 $df25:5 PD5 $df21:5
22 p6.4 (P64) !VIRQ (I) ACSR25 P64 RXD2 PDD6 $df26:4 PD6 $df22:6
72 !CS0 (P70) !I/O0 (O) PCS70 P70 CS0B PCS7 $df27:0 PD7 $df23:0
73 !CS1 (P71) !I/O1 (O) PCS71 P71 CS1B PCS7 $df27:1 PD7 $df23:1
74 p7.2 (P72) !FLASH_SS (O) PCS72 P72 CS2B PCS7 $df27:2 PD7 $df23:2
75 p7.3 (P73) SCK (O) PCS73 P73 CS3B PCS7 $df27:3 PD7 $df23:3
80 !CS4 (P74) !CS4 (O) PCS74 P74 CS4B PCS7 $df27:4 PD7 $df23:4
81 !CS5 (P75) !CS5 (O) PCS75 P75 CS5B PCS7 $df27:5 PD7 $df23:5
82 !CS6 (P76) !CS6 (O) PCS76 P76 CS6B PCS7 $df27:6 PD7 $df23:6
83 !CS7 (P77) !CS7 (O) PCS77 P77 CS7B PCS7 $df27:7 PD7 $df23:7
94 TG0 (TG0) TG0 (O) TCR31 n/a TG0 n/a n/a
95 TG1 (TG1) TG1 (O) TCR33 n/a TG1 n/a n/a
98 p4.2 (P42) !FPGA_RES (O) PIBER0 P42 PIIB PDD4 $df24:2 PD4 $df20:2
99 p4.3 (P43) CDONE (I+O) PIBER0*PIBER1B P43 PIWEB PDD4 $df24:3 PD4 $df20:3
100 p4.4 (P44) MOSI (O) PIBER0*PIBER1B P44 PIRS0 PDD4 $df24:4 PD4 $df20:4
—- ———- ————– ————– ———– ———– ————- ———–

How to read/write a signal?

So MISO (in the current prototype) is set to P4.5, that is, bit five of port 4. So since MISO is an input, you would set bit five of PDD4 (port 4 data direction) to zero; then bit five of PD4 (port 4 data) will always read the current value of that input line. [see 2.5.4 I/O Register Memory Map] I'm not sure the cb names are helpful.

TG0 and TG1 are not usable this way; they are only available to the tone generator, which uses an internal timer to produce a sine wave on either or both.

SCK is currently wired to P7.2; this is a pin shared with /CS2, which is unused. We set PCS7 bit 2 to zero, and then the state of bit 2 of PD7 will always be reflected on the pin (there is no PDD7, as port 7 is always an output).

I/00 is a renamed /CS0, and goes low whenever memory from 0x00DF000 to 00x00DF1F is accessed as long as bit zero of PCS7 is high.