diff --git a/firmware/bbc_micro/bbc.ioc b/firmware/bbc_micro/bbc.ioc
index 2401964..0dbbb48 100644
--- a/firmware/bbc_micro/bbc.ioc
+++ b/firmware/bbc_micro/bbc.ioc
@@ -4,6 +4,7 @@ KeepUserPlacement=false
Mcu.Family=STM32F0
Mcu.IP0=I2C1
Mcu.IP1=NVIC
+Mcu.IP10=USB
Mcu.IP2=RCC
Mcu.IP3=SPI1
Mcu.IP4=SYS
@@ -12,33 +13,48 @@ Mcu.IP6=TIM14
Mcu.IP7=TIM16
Mcu.IP8=TIM17
Mcu.IP9=USART1
-Mcu.IPNb=10
+Mcu.IPNb=11
Mcu.Name=STM32F072C(8-B)Tx
Mcu.Package=LQFP48
Mcu.Pin0=PC13
-Mcu.Pin1=PA4
-Mcu.Pin10=PA9
-Mcu.Pin11=PA10
-Mcu.Pin12=PA13
-Mcu.Pin13=PA14
-Mcu.Pin14=PB6
-Mcu.Pin15=PB7
-Mcu.Pin16=PB8
-Mcu.Pin17=PB9
-Mcu.Pin18=VP_SYS_VS_Systick
-Mcu.Pin19=VP_TIM2_VS_ClockSourceINT
-Mcu.Pin2=PA5
-Mcu.Pin20=VP_TIM14_VS_ClockSourceINT
-Mcu.Pin21=VP_TIM16_VS_ClockSourceINT
-Mcu.Pin22=VP_TIM17_VS_ClockSourceINT
-Mcu.Pin3=PA6
-Mcu.Pin4=PA7
-Mcu.Pin5=PB10
-Mcu.Pin6=PB11
-Mcu.Pin7=PB12
-Mcu.Pin8=PB13
-Mcu.Pin9=PB14
-Mcu.PinsNb=23
+Mcu.Pin1=PC14-OSC32_IN
+Mcu.Pin10=PB0
+Mcu.Pin11=PB1
+Mcu.Pin12=PB2
+Mcu.Pin13=PB10
+Mcu.Pin14=PB11
+Mcu.Pin15=PB12
+Mcu.Pin16=PB13
+Mcu.Pin17=PB14
+Mcu.Pin18=PB15
+Mcu.Pin19=PA8
+Mcu.Pin2=PC15-OSC32_OUT
+Mcu.Pin20=PA9
+Mcu.Pin21=PA11
+Mcu.Pin22=PA12
+Mcu.Pin23=PA13
+Mcu.Pin24=PA14
+Mcu.Pin25=PA15
+Mcu.Pin26=PB3
+Mcu.Pin27=PB4
+Mcu.Pin28=PB5
+Mcu.Pin29=PB6
+Mcu.Pin3=PF1-OSC_OUT
+Mcu.Pin30=PB7
+Mcu.Pin31=PB8
+Mcu.Pin32=PB9
+Mcu.Pin33=VP_SYS_VS_Systick
+Mcu.Pin34=VP_TIM2_VS_ClockSourceINT
+Mcu.Pin35=VP_TIM14_VS_ClockSourceINT
+Mcu.Pin36=VP_TIM16_VS_ClockSourceINT
+Mcu.Pin37=VP_TIM17_VS_ClockSourceINT
+Mcu.Pin4=PA2
+Mcu.Pin5=PA3
+Mcu.Pin6=PA4
+Mcu.Pin7=PA5
+Mcu.Pin8=PA6
+Mcu.Pin9=PA7
+Mcu.PinsNb=38
Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32F072C8Tx
@@ -53,12 +69,26 @@ NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:false
NVIC.TIM14_IRQn=true\:3\:0\:true\:false\:true\:true
NVIC.TIM16_IRQn=true\:3\:0\:true\:false\:true\:true
NVIC.TIM17_IRQn=true\:2\:0\:true\:false\:true\:true
-PA10.Mode=Asynchronous
-PA10.Signal=USART1_RX
+PA11.Mode=Device
+PA11.Signal=USB_DM
+PA12.Mode=Device
+PA12.Signal=USB_DP
PA13.Mode=Serial_Wire
PA13.Signal=SYS_SWDIO
PA14.Mode=Serial_Wire
PA14.Signal=SYS_SWCLK
+PA15.GPIOParameters=GPIO_Label
+PA15.GPIO_Label=MOUSE_RIGHT
+PA15.Locked=true
+PA15.Signal=GPIO_Output
+PA2.GPIOParameters=GPIO_Label
+PA2.GPIO_Label=BUTTON0
+PA2.Locked=true
+PA2.Signal=GPIO_Output
+PA3.GPIOParameters=GPIO_Label
+PA3.GPIO_Label=BUTTON1
+PA3.Locked=true
+PA3.Signal=GPIO_Output
PA4.Mode=NSS_Signal_Hard_Input
PA4.Signal=SPI1_NSS
PA5.Mode=Full_Duplex_Slave
@@ -68,8 +98,20 @@ PA6.Mode=Full_Duplex_Slave
PA6.Signal=SPI1_MISO
PA7.Mode=Full_Duplex_Slave
PA7.Signal=SPI1_MOSI
-PA9.Mode=Asynchronous
+PA8.GPIOParameters=GPIO_Label
+PA8.GPIO_Label=W
+PA8.Locked=true
+PA8.Signal=GPIO_Output
+PA9.Mode=Half_duplex(single_wire_mode)
PA9.Signal=USART1_TX
+PB0.GPIOParameters=GPIO_Label
+PB0.GPIO_Label=DIGIPOT_RESET
+PB0.Locked=true
+PB0.Signal=GPIO_Output
+PB1.GPIOParameters=GPIO_Label
+PB1.GPIO_Label=KB_BREAK
+PB1.Locked=true
+PB1.Signal=GPIO_Input
PB10.GPIOParameters=GPIO_Label
PB10.GPIO_Label=KB_ROW_C
PB10.Locked=true
@@ -90,6 +132,26 @@ PB14.GPIOParameters=GPIO_Label
PB14.GPIO_Label=KB_COL_D
PB14.Locked=true
PB14.Signal=GPIO_Input
+PB15.GPIOParameters=GPIO_Label
+PB15.GPIO_Label=CA2
+PB15.Locked=true
+PB15.Signal=GPIO_Input
+PB2.GPIOParameters=GPIO_Label
+PB2.GPIO_Label=KB_EN
+PB2.Locked=true
+PB2.Signal=GPXTI2
+PB3.GPIOParameters=GPIO_Label
+PB3.GPIO_Label=MOUSE_MID
+PB3.Locked=true
+PB3.Signal=GPIO_Output
+PB4.GPIOParameters=GPIO_Label
+PB4.GPIO_Label=MOUSE_LEFT
+PB4.Locked=true
+PB4.Signal=GPIO_Output
+PB5.GPIOParameters=GPIO_Label
+PB5.GPIO_Label=MOUSE_YD
+PB5.Locked=true
+PB5.Signal=GPIO_Output
PB6.Mode=I2C
PB6.Signal=I2C1_SCL
PB7.Mode=I2C
@@ -102,11 +164,18 @@ PB9.GPIOParameters=GPIO_Label
PB9.GPIO_Label=KB_ROW_B
PB9.Locked=true
PB9.Signal=GPIO_Input
-PC13.GPIOParameters=PinState,GPIO_Label
-PC13.GPIO_Label=SLAVE_REQ
+PC13.GPIOParameters=GPIO_Label
+PC13.GPIO_Label=MOUSE_XD
PC13.Locked=true
-PC13.PinState=GPIO_PIN_RESET
PC13.Signal=GPIO_Output
+PC14-OSC32_IN.GPIOParameters=GPIO_Label
+PC14-OSC32_IN.GPIO_Label=MOUSE_YA
+PC14-OSC32_IN.Locked=true
+PC14-OSC32_IN.Signal=GPIO_Output
+PC15-OSC32_OUT.GPIOParameters=GPIO_Label
+PC15-OSC32_OUT.GPIO_Label=MOUSE_XA
+PC15-OSC32_OUT.Locked=true
+PC15-OSC32_OUT.Signal=GPIO_Output
PCC.Checker=false
PCC.Line=STM32F0x2
PCC.MCU=STM32F072C(8-B)Tx
@@ -115,6 +184,11 @@ PCC.Seq0=0
PCC.Series=STM32F0
PCC.Temperature=25
PCC.Vdd=3.6
+PF1-OSC_OUT.GPIOParameters=GPIO_Label,PinState
+PF1-OSC_OUT.GPIO_Label=SLAVE_REQ
+PF1-OSC_OUT.Locked=true
+PF1-OSC_OUT.PinState=GPIO_PIN_RESET
+PF1-OSC_OUT.Signal=GPIO_Output
PinOutPanel.RotationAngle=0
ProjectManager.AskForMigrate=true
ProjectManager.BackupPrevious=false
@@ -142,7 +216,7 @@ ProjectManager.StackSize=0x400
ProjectManager.TargetToolchain=MDK-ARM V5
ProjectManager.ToolChainLocation=
ProjectManager.UnderRoot=false
-ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_SPI1_Init-SPI1-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_TIM2_Init-TIM2-false-HAL-true,6-MX_TIM16_Init-TIM16-false-HAL-true,7-MX_TIM17_Init-TIM17-false-HAL-true,8-MX_TIM14_Init-TIM14-false-HAL-true,9-MX_I2C1_Init-I2C1-false-HAL-true
+ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_SPI1_Init-SPI1-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_TIM2_Init-TIM2-false-HAL-true,6-MX_TIM16_Init-TIM16-false-HAL-true,7-MX_TIM17_Init-TIM17-false-HAL-true,8-MX_TIM14_Init-TIM14-false-HAL-true,9-MX_I2C1_Init-I2C1-false-HAL-true,10-MX_USB_PCD_Init-USB-false-HAL-true
RCC.AHBFreq_Value=48000000
RCC.APB1Freq_Value=48000000
RCC.APB1TimFreq_Value=48000000
@@ -165,6 +239,8 @@ RCC.USART1Freq_Value=48000000
RCC.USART2Freq_Value=48000000
RCC.Usart1ClockSelection=RCC_USART1CLKSOURCE_SYSCLK
RCC.VCOOutput2Freq_Value=8000000
+SH.GPXTI2.0=GPIO_EXTI2
+SH.GPXTI2.ConfNb=1
SPI1.DataSize=SPI_DATASIZE_8BIT
SPI1.Direction=SPI_DIRECTION_2LINES
SPI1.IPParameters=VirtualType,Mode,Direction,DataSize,VirtualNSS
@@ -186,8 +262,8 @@ TIM2.IPParameters=Prescaler,Period
TIM2.Period=4294967295
TIM2.Prescaler=47
USART1.BaudRate=115200
-USART1.IPParameters=VirtualMode-Asynchronous,BaudRate
-USART1.VirtualMode-Asynchronous=VM_ASYNC
+USART1.IPParameters=BaudRate,VirtualMode-Half_duplex(single_wire_mode)
+USART1.VirtualMode-Half_duplex(single_wire_mode)=VM_ASYNC
VP_SYS_VS_Systick.Mode=SysTick
VP_SYS_VS_Systick.Signal=SYS_VS_Systick
VP_TIM14_VS_ClockSourceINT.Mode=Enable_Timer
diff --git a/pcb/bbc_micro/bbc_micro.lbr b/pcb/bbc_micro/bbc_micro.lbr
index 01939a9..e302417 100644
--- a/pcb/bbc_micro/bbc_micro.lbr
+++ b/pcb/bbc_micro/bbc_micro.lbr
@@ -228,6 +228,15 @@ by exp-lbrs.ulp
+
+
+
+
+
+
+
+
+
@@ -272,6 +281,15 @@ by exp-lbrs.ulp
+
+
+
+
+
+
+
+
+
@@ -332,6 +350,23 @@ by exp-lbrs.ulp
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+