Skip to content

Instantly share code, notes, and snippets.

@cocus
Created April 13, 2023 18:31
Show Gist options
  • Save cocus/8e3c54b34e7bc94ff2b03f9cd42c0703 to your computer and use it in GitHub Desktop.
Save cocus/8e3c54b34e7bc94ff2b03f9cd42c0703 to your computer and use it in GitHub Desktop.
IDA 80C552 CPU definition
; Note, add this to the i51.cfg on your ida installation dir.
; The aim is to add support for the Phillips P80C552 CPU, which is a
; 80C51 variant.
; This is the revision 1 of this gist
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.80C552
; https://www.nxp.com/docs/en/data-sheet/80C552_83C552.pdf
; https://www.keil.com/dd/docs/datashts/philips/8xc5x2_ov.pdf
; http://www.keil.com/dd/docs/c51/reg52.h
; MEMORY MAP
area CODE code 0x0000:0x10000
area DATA RAM 0x0000:0x0100
area DATA FSR 0x0080:0x0100
; Interrupt and reset vector assignments
entry RESET 0x0000 RESET
entry X0 0x0003 External interrupt 0
entry T0 0x000B Timer 0 overflow
entry X1 0x0013 External interrupt 1
entry T1 0x001B Timer 1 overflow
entry S0 0x0023 SIO0 (UART)
entry S1 0x002B SIO1 (I2C)
entry CT0 0x0033 T2 capture 0
entry CT1 0x003B T2 capture 1
entry CT2 0x0043 T2 capture 2
entry CT3 0x004B T2 capture 3
entry ADC 0x0053 ADC completion
entry CM0 0x005B T2 compare 0
entry CM1 0x0063 T2 compare 1
entry CM2 0x006B T2 compare 2
entry T2 0x0073 T2 overflow
; INPUT/OUTPUT PORTS
P0 0x0080 Port 0
P0.AD7 7
P0.AD6 6
P0.AD5 5
P0.AD4 4
P0.AD3 3
P0.AD2 2
P0.AD1 1
P0.AD0 0
SP 0x0081 Stack Pointer
DPL 0x0082 Data Pointer, Low Byte
DPL.DPL7 7
DPL.DPL6 6
DPL.DPL5 5
DPL.DPL4 4
DPL.DPL3 3
DPL.DPL2 2
DPL.DPL1 1
DPL.DPL0 0
DPH 0x0083 Data Pointer, High Byte
DPH.DPH7 7
DPH.DPH6 6
DPH.DPH5 5
DPH.DPH4 4
DPH.DPH3 3
DPH.DPH2 2
DPH.DPH1 1
DPH.DPH0 0
RESERVED0084 0x0084 RESERVED
RESERVED0085 0x0085 RESERVED
RESERVED0086 0x0086 RESERVED
PCON 0x0087 Power control
TCON 0x0088 Timer control
TCON.TF1 7
TCON.TR1 6
TCON.TF0 5
TCON.TR0 4
TCON.IE1 3
TCON.IT1 2
TCON.IE0 1
TCON.IT0 0
TMOD 0x0089 Timer mode
TL0 0x008A Timer low 0
TL1 0x008B Timer low 1
TH0 0x008C Timer high 0
TH1 0x008D Timer high 1
RESERVED008E 0x008E RESERVED
RESERVED008F 0x008F RESERVED
P1 0x0090 Port 1
P1.SDA 7
P1.SCL 6
P1.RT2 5
P1.T2 4
P1.CT3I 3
P1.CT2I 2
P1.CT1I 1
P1.CT0I 0
RESERVED0091 0x0091 RESERVED
RESERVED0092 0x0092 RESERVED
RESERVED0093 0x0093 RESERVED
RESERVED0094 0x0094 RESERVED
RESERVED0095 0x0095 RESERVED
RESERVED0096 0x0096 RESERVED
RESERVED0097 0x0097 RESERVED
S0CON 0x0098 Serial 0 control
S0CON.SM0 7
S0CON.SM1 6
S0CON.SM2 5
S0CON.REN 4
S0CON.TB8 3
S0CON.RB8 2
S0CON.TI 1
S0CON.RI 0
S0BUF 0x0099 Serial 0 data buffer
RESERVED009A 0x009A RESERVED
RESERVED009B 0x009B RESERVED
RESERVED009C 0x009C RESERVED
RESERVED009D 0x009D RESERVED
RESERVED009E 0x009E RESERVED
RESERVED009F 0x009F RESERVED
P2 0x00A0 Port 2
P2.A15 7
P2.A14 6
P2.A13 5
P2.A12 4
P2.A11 3
P2.A10 2
P2.A9 1
P2.A8 0
RESERVED00A1 0x00A1 RESERVED
RESERVED00A2 0x00A2 RESERVED
RESERVED00A3 0x00A3 RESERVED
RESERVED00A4 0x00A4 RESERVED
RESERVED00A5 0x00A5 RESERVED
RESERVED00A6 0x00A6 RESERVED
RESERVED00A7 0x00A7 RESERVED
IEN0 0x00A8 Interrupt enable 0
IEN0.EA 7
IEN0.EAD 6
IEN0.ES1 5
IEN0.ES0 4
IEN0.ET1 3
IEN0.EX1 2
IEN0.ET0 1
IEN0.EX0 0
CML0 0x00A9 Compare low 0
CML1 0x00AA Compare low 1
CML2 0x00AB Compare low 2
CTL0 0x00AC Capture low 0
CTL1 0x00AD Capture low 1
CTL2 0x00AE Capture low 2
CTL3 0x00AF Capture low 3
P3 0x00B0 Port 3
P3.RD 7
P3.WR 6
P3.T1 5
P3.T0 4
P3.INT1 3
P3.INT0 2
P3.TXD 1
P3.RXD 0
RESERVED00B1 0x00B1 RESERVED
RESERVED00B2 0x00B2 RESERVED
RESERVED00B3 0x00B3 RESERVED
RESERVED00B4 0x00B4 RESERVED
RESERVED00B5 0x00B5 RESERVED
RESERVED00B6 0x00B6 RESERVED
RESERVED00B7 0x00B7 RESERVED
IP0 0x00B8 Interrupt priority 0
IP0.PAD 6
IP0.PS1 5
IP0.PS0 4
IP0.PT1 3
IP0.PX1 2
IP0.PT0 1
IP0.PX0 0
RESERVED00B9 0x00B9 RESERVED
RESERVED00BA 0x00BA RESERVED
RESERVED00BB 0x00BB RESERVED
RESERVED00BC 0x00BC RESERVED
RESERVED00BD 0x00BD RESERVED
RESERVED00BE 0x00BE RESERVED
RESERVED00BF 0x00BF RESERVED
P4 0x00C0 Port 4
P4.CMT1 7
P4.CMT0 6
P4.CMSR5 5
P4.CMSR4 4
P4.CMSR3 3
P4.CMSR2 2
P4.CMSR1 1
P4.CMSR0 0
RESERVED00C1 0x00C1 RESERVED
RESERVED00C2 0x00C2 RESERVED
RESERVED00C3 0x00C3 RESERVED
P5 0x00C4 Port 5
ADCON 0x00C5 Adc control
ADCH 0x00C6 A/D converter high
RESERVED00C7 0x00C7 RESERVED
T2CON 0x00C8 Timer 2 int flag reg
T2CON.T20V 7
T2CON.CMI2 6
T2CON.CMI1 5
T2CON.CMI0 4
T2CON.CTI3 3
T2CON.CTI2 2
T2CON.CTI1 1
T2CON.CTI0 0
CMH0 0x00C9 Compare high 0
CMH1 0x00CA Compare high 1
CMH2 0x00CB Compare high 2
CTH0 0x00CC Capture high 0
CTH1 0x00CD Capture high 1
CHT2 0x00CE Capture high 2
CTH3 0x00CF Capture high 3
PSW 0x00D0 Program Status Word Register
PSW.CY 7 Carry Flag
PSW.AC 6 Auxiliary Carry Flag
PSW.F0 5 General Purpose Flag
PSW.RS1 4 Register Bank Select Control Bit 1
PSW.RS0 3 Register Bank Select Control Bit 0
PSW.OV 2 Overflow Flag
PSW.F1 1 General Purpose Flag
PSW.P 0 Parity Flag
RESERVED00D1 0x00D1 RESERVED
RESERVED00D2 0x00D2 RESERVED
RESERVED00D3 0x00D3 RESERVED
RESERVED00D4 0x00D4 RESERVED
RESERVED00D5 0x00D5 RESERVED
RESERVED00D6 0x00D6 RESERVED
RESERVED00D7 0x00D7 RESERVED
S1CON 0x00D8 Serial 1 control
S1CON.CR2 7
S1CON.ENS1 6
S1CON.STA 5
S1CON.ST0 4
S1CON.SI 3
S1CON.AA 2
S1CON.CR1 1
S1CON.CR0 0
S1STA 0x00D9 Serial 1 status
S1DAT 0x00DA Serial 1 data
S1ADR 0x00DB Serial 1 address
RESERVED00DC 0x00DC RESERVED
RESERVED00DD 0x00DD RESERVED
RESERVED00DE 0x00DE RESERVED
RESERVED00DF 0x00DF RESERVED
ACC 0x00E0 Accumulator
ACC.ACC7 7
ACC.ACC6 6
ACC.ACC5 5
ACC.ACC4 4
ACC.ACC3 3
ACC.ACC2 2
ACC.ACC1 1
ACC.ACC0 0
RESERVED00E1 0x00E1 RESERVED
RESERVED00E2 0x00E2 RESERVED
RESERVED00E3 0x00E3 RESERVED
RESERVED00E4 0x00E4 RESERVED
RESERVED00E5 0x00E5 RESERVED
RESERVED00E6 0x00E6 RESERVED
RESERVED00E7 0x00E7 RESERVED
IEN1 0x00E8 Interrupt enable 1
IEN1.ET2 7
IEN1.ECM2 6
IEN1.ECM1 5
IEN1.ECM0 4
IEN1.ECT3 3
IEN1.ECT2 2
IEN1.ECT1 1
IEN1.ECT0 0
RESERVED00E9 0x00E9 RESERVED
TM2CON 0x00EA Timer 2 control
CTCON 0x00EB Capture control
TML2 0x00EC Timer low 2
TMH2 0x00ED Timer high 2
STE 0x00EE Set enable
RTE 0x00EF Reset/toggle enable
B 0x00F0 B Register
B.B7 7
B.B6 6
B.B5 5
B.B4 4
B.B3 3
B.B2 2
B.B1 1
B.B0 0
RESERVED00F1 0x00F1 RESERVED
RESERVED00F2 0x00F2 RESERVED
RESERVED00F3 0x00F3 RESERVED
RESERVED00F4 0x00F4 RESERVED
RESERVED00F5 0x00F5 RESERVED
RESERVED00F6 0x00F6 RESERVED
RESERVED00F7 0x00F7 RESERVED
IP1 0x00F8 Interrupt priority 1
IP1.PT2 7
IP1.PCM2 6
IP1.PCM1 5
IP1.PCM0 4
IP1.PCT3 3
IP1.PCT2 2
IP1.PCT1 1
IP1.PCT0 0
RESERVED00F9 0x00F9 RESERVED
RESERVED00FA 0x00FA RESERVED
RESERVED00FB 0x00FB RESERVED
PWM0 0x00FC PWM register 0
PWM1 0x00FD PWM register 1
PWMP 0x00FE PWM prescaler
T3 0x00FF Timer 3
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment