// (C) 2020-2026 Philip Endecott.
// Distributed under the Boost Software License, Version 1.0.
// See accompanying file LICENCE.txt or copy at https://www.boost.org/LICENSE_1_0.txt

#ifndef lipstick_registers_hh
#define lipstick_registers_hh

#include <cstdint>


volatile uint8_t*  const U0RBR   = (uint8_t*) 0xE000C000;
volatile uint8_t*  const U0THR   = (uint8_t*) 0xE000C000;
volatile uint8_t*  const U0DLL   = (uint8_t*) 0xE000C000;
volatile uint8_t*  const U0DLM   = (uint8_t*) 0xE000C004;
volatile uint8_t*  const U0IER   = (uint8_t*) 0xE000C004;
volatile uint8_t*  const U0IIR   = (uint8_t*) 0xE000C008;
volatile uint8_t*  const U0FCR   = (uint8_t*) 0xE000C008;
volatile uint8_t*  const U0LCR   = (uint8_t*) 0xE000C00C;
volatile uint8_t*  const U0LSR   = (uint8_t*) 0xE000C014;
volatile uint8_t*  const U0SCR   = (uint8_t*) 0xE000C01C;
volatile uint8_t*  const U0ACR   = (uint8_t*) 0xE000C020;
volatile uint8_t*  const U0FDR   = (uint8_t*) 0xE000C028;
volatile uint8_t*  const U0TER   = (uint8_t*) 0xE000C030;
volatile uint8_t*  const ILR     = (uint8_t*)  0xE0024000;
volatile uint8_t*  const CCR     = (uint8_t*)  0xE0024008;
volatile uint8_t*  const CIIR    = (uint8_t*)  0xE002400C;
volatile uint8_t*  const AMR     = (uint8_t*)  0xE0024010;
volatile uint32_t* const CTIME0  = (uint32_t*) 0xE0024014;
volatile uint8_t*  const SEC     = (uint8_t*)  0xE0024020;
volatile uint8_t*  const MIN     = (uint8_t*)  0xE0024024;
volatile uint8_t*  const HOUR    = (uint8_t*)  0xE0024028;
volatile uint16_t* const PREINT  = (uint16_t*) 0xE0024080;
volatile uint16_t* const PREFRAC = (uint16_t*) 0xE0024084;
volatile uint32_t* const VICIRQStatus   = (uint32_t*) 0xfffff000;
volatile uint32_t* const VICFIQStatus   = (uint32_t*) 0xfffff004;
volatile uint32_t* const VICRawIntr     = (uint32_t*) 0xfffff008;
volatile uint32_t* const VICIntSelect   = (uint32_t*) 0xfffff00c;
volatile uint32_t* const VICIntEnable   = (uint32_t*) 0xfffff010;
volatile uint32_t* const VICVectAddr    = (uint32_t*) 0xfffff030;
volatile uint32_t* const VICDefVectAddr = (uint32_t*) 0xfffff034;
volatile uint32_t* const VICVectAddrs   = (uint32_t*) 0xfffff100;  // To f13c
volatile uint32_t* const VICvectCntl    = (uint32_t*) 0xfffff200;  // To f23c
volatile uint32_t* const IO0PIN = (uint32_t*) 0xE0028000;
volatile uint32_t* const IO0SET = (uint32_t*) 0xE0028004;
volatile uint32_t* const IO0DIR = (uint32_t*) 0xE0028008;
volatile uint32_t* const IO0CLR = (uint32_t*) 0xE002800C;
volatile uint32_t* const IO1PIN = (uint32_t*) 0xE0028010;
volatile uint32_t* const IO1SET = (uint32_t*) 0xE0028014;
volatile uint32_t* const IO1DIR = (uint32_t*) 0xE0028018;
volatile uint32_t* const IO1CLR = (uint32_t*) 0xE002801C;
volatile uint32_t* const MEMMAP = (uint32_t*) 0xE01fc040;
volatile uint32_t* const ADCR  = (uint32_t*) 0xE0034000;
volatile uint32_t* const ADGDR = (uint32_t*) 0xE0034004;
volatile uint8_t*  const PCON  = (uint8_t*)  0xE01FC0C0;
volatile uint32_t* const PCONP = (uint32_t*) 0xE01FC0C4;
volatile uint8_t*  const MAMCR  = (uint8_t*)  0xE01FC000;
volatile uint8_t*  const MAMTIM = (uint8_t*)  0xE01FC004;
volatile uint32_t* const PINSEL0 = (uint32_t*) 0xE002C000;
volatile uint32_t* const PINSEL1 = (uint32_t*) 0xE002C004;
volatile uint32_t* const PINSEL2 = (uint32_t*) 0xE002C014;
volatile uint8_t*  const T0IR  = (uint8_t*)  0xE0004000;
volatile uint8_t*  const T0TCR = (uint8_t*)  0xE0004004;
volatile uint32_t* const T0TC  = (uint32_t*) 0xE0004008;
volatile uint32_t* const T0PR  = (uint32_t*) 0xE000400C;
volatile uint16_t* const T0MCR = (uint16_t*) 0xE0004014;
volatile uint32_t* const T0MR0 = (uint32_t*) 0xE0004018;
volatile uint8_t*  const T1IR  = (uint8_t*)  0xE0008000;
volatile uint8_t*  const T1TCR = (uint8_t*)  0xE0008004;
volatile uint32_t* const T1TC  = (uint32_t*) 0xE0008008;
volatile uint32_t* const T1PR  = (uint32_t*) 0xE000800C;
volatile uint16_t* const T1MCR = (uint16_t*) 0xE0008014;
volatile uint32_t* const T1MR0 = (uint32_t*) 0xE0008018;
volatile uint32_t* const T1MR1 = (uint32_t*) 0xE000801C;
volatile uint32_t* const T1MR2 = (uint32_t*) 0xE0008020;
volatile uint32_t* const T1MR3 = (uint32_t*) 0xE0008024;
volatile uint32_t* const T1CCR = (uint32_t*) 0xE0008028;
volatile uint32_t* const T1CR0 = (uint32_t*) 0xE000802C;
volatile uint32_t* const T1CR1 = (uint32_t*) 0xE0008030;
volatile uint32_t* const T1CR2 = (uint32_t*) 0xE0008034;
volatile uint32_t* const T1CR3 = (uint32_t*) 0xE0008038;
volatile uint32_t* const T1EMR = (uint32_t*) 0xE000803C;
volatile uint8_t*  const WDMOD  = (uint8_t*)  0xE0000000;
volatile uint32_t* const WDTC   = (uint32_t*) 0xE0000004;
volatile uint8_t*  const WDFEED = (uint8_t*)  0xE0000008;
volatile uint32_t* const WDTV   = (uint32_t*) 0xE000000C;


#endif

