Skip to content

MemPCMCIA

Matthias Melcher edited this page Oct 21, 2024 · 13 revisions

PCMCIA Memory Map

102834

see also: Memory Map

  • PCMCIA Port 0 starts at 0x30000000
  • PCMCIA Port 1 starts at 0x40000000
Offset Content
+0x00000000 64MB PCMCIA Attributes
+0x04000000 64MB PCMCIA I/O Space
+0x08000000 64MB PCMCIA Memory Space
+0x0C000000 64MB PCMCIA Control

Memory and attribute space is 16 bits wide, I/O space is 8 or 16 bits wide, depending on the state of ~IOIS16. The controller can simulate 32 bit access.

Control Register Map at +0x0C000000:

Offset Bits Content
+0x0000 active interrupts (bit assignment is probably wrong!)
0x0001 kSocketBusyIntVector, Memory card busy interrupt
0x0002 kSocketStatusChangedIntVector, IO card status changed interrupt#
0x0004 kSocketCardDetectedIntVector, Card detected interrupt, called by TPCMCIAController::InsertCard
0x0008 kSocketCardLockIntVector, Card unlock/remove interupt, In fact, we use GPIO
0x0010 kSocketCardIREQIntVector, IO card IREQ interrupt
0x0020 kSocketCardInsertIntVector, Card inserted interrupt#, Unused, Brick only
0x0040 kSocketSpeakerIntVector', Speaker interrupt#
0x0080 kSocketDREQIntVector, DMA REQ interrupt
0x0100 kSocketWPIntVector, WP interrupt
0x0200 kSocketReadFailureIntVector, Read failure interrupt
0x0400 kSocketWriteFailureIntVector, Write failure interrupt
0x0800 kSocketWrFIFOEmptyIntVector, Write FIFO empty interrupt
0x1000 kSocketWrFIFOThreshldIntVector, Write FIFO threshold met (2 or 4 entries interrupt)
+0x0400 Interrupt Control Register, enabled interrupts
+0x0800 ? interrupts
+0x0C00 promote interrupts to FIQ
+0x1000 interrupt on rising edge
+0x1400 interrupt on falling edge
+0x1800 interrupt causes wakeup
+0x1C00 PCMCIA Pin input
0x0001 BVD1/~STCH, pin 63, Battery Voltage / Card Status Changed
0x0002 BVD2/~SPKR, pin 62, Battery Voltage / Speaker Out
0x0004 ~CD1, pin 36, Card Detect
0x0008 ~CD2, pin 67, Card Detect
0x0010 ~VS1, pin 43, Card Voltage Sense 1
0x0020 ~VS2, pin 57, Card Voltage Sense 2
0x0040 ~REG, pin 61, Register Select/IO Enable (1=Access Memory, 0=Access Registers)
0x0080 ~CE1, pin 7, Card Enable
0x0100 ~CE2, pin 42, Card Enable
0x0200 WP/~IOIS16, pin 33, Write Protect / IO is 16 bit wide
0x0400 READY/~IREQ, pin 16, Ready, Busy / Interrupt Request (1=Card is ready to receive more data)
0x0800 FIFO Threshold
0x1000 FIFO Empty
0x2000 Write Fail
0x4000 Read Fail
+0x2000 bus access control
0x001F Read Write Queue Control
0x0020 Endian Convert
0x0080 Handshake Ready
0x0100 Assembly 32
0x0400 Swap Size
0x0800 Dynamic Swap
+0x2400 pin access and direction
0x0080 No Byte Access
0x0100 Select IO
0x0200 Software Write Protect
0x0400 Enable Bus
0x0800 Enable Reset Out
0x1000 RESET, pin 58, Card Reset
+0x2800 pullups and power
0x0020 Vcc, pin 17, Power
0x7C00 Set pull-up Control
+0x2C00 PCMCIA Power Control
0x0003 Vcc, ?? 01=5V, 10=12V
0x0004 Vpp1, pin 18, Programming Power, 0=5V, 1=12V
0x1000 VS1OUT
0x2000 VS2OUT
0x4000 VS1DIR
0x8000 VS2DIR
+0x3000 Attribute and Common Memory Speed
0x003F Memory Speed (could be a clock count, *2 clock counts)
+0x3400 unknown (could be attribute access speed)
+0x3800 I/O Speed
0x003F I/O Speed (could be a clock count)
+0x3C00 unknown
+0x4000 unknown
+0x4400 unknown
  • see InterruptObject* gPCMCIA0IntObj; // 0C100E70
  • see InterruptObject* gPCMCIA1IntObj; // 0C100E74