Author Topic: $0.2 CH32X033 RISC-V, 62K Flash, 20K SRAM with native USB2.0  (Read 3767 times)

0 Members and 1 Guest are viewing this topic.

Offline IOsettingTopic starter

  • Regular Contributor
  • *
  • Posts: 56
  • Country: cn
$0.2 CH32X033 RISC-V, 62K Flash, 20K SRAM with native USB2.0
« on: January 23, 2024, 02:41:14 am »
I happened to know this CH32 RISC-V microcontroller while browsing Stefan's Hackaday page
https://hackaday.io/project/194408-ch32x033-f8p6-development-board.

Quote
CH32X033 is a low-cost microcontroller that utilizes the QingKe 32-bit RISC-V4C core, supporting the RV32IMAC instruction set along with self-extending instructions. This microcontroller comes with a built-in USB PHY and supports USB2.0 full-speed device functions. It features a programmable protocol I/O controller (PIOC), 2 groups of operational amplifiers (OPA), 2 groups of analog comparators (CMP), 4 groups of USART, I2C, SPI, multiple timers, a 12-bit ADC, a 10-channel Touchkey, and various other peripheral resources. The device can operate at clock frequencies of up to 48MHz and is compatible with a supply voltage range of 2.0V to 5.5V. The CH32X033 includes 62KB of flash, 20KB of SRAM, and an embedded USB bootloader.

I checked the price on Taobao, it's around 1.4 CNY (0.2 USD), in fact, it's even cheaper than a CH340N, which costs around 1.5 CNY.
This makes it particularly appealing, as you don't need any additional USB2TTL chips when working on small USB applications.
 

Online SiliconWizard

  • Super Contributor
  • ***
  • Posts: 14481
  • Country: fr
Re: $0.2 CH32X033 RISC-V, 62K Flash, 20K SRAM with native USB2.0
« Reply #1 on: January 23, 2024, 03:36:28 am »
Interesting. The official product page: https://www.wch-ic.com/products/CH32X035.html
Note that the series is under the CH32X035 name, but it also includes the CH32X033, which is the lowest end of the range (and cheapest), without USB-PD.
Otherwise, all CH32X035 support USB-PD as well, so all in all, can be a pretty good option for a whole range of applications at a very low price.

They can be found on Aliexpress (using Taobao directly is uncommon in the west I think), not from the "regular" distributors like LCSC at this point.
« Last Edit: January 23, 2024, 03:41:42 am by SiliconWizard »
 

Online HwAoRrDk

  • Super Contributor
  • ***
  • Posts: 1478
  • Country: gb
Re: $0.2 CH32X033 RISC-V, 62K Flash, 20K SRAM with native USB2.0
« Reply #2 on: January 23, 2024, 03:50:21 am »
The Programmable Protocol I/O Microcontroller, or PIOC, seems to be quite interesting. Seems like they're gunning for something along the lines of the RP2040's PIO.

There's very little information about it in the English Reference Manual:

Quote
The CH32X035 chip is embedded with a programmable protocol I/O microcontroller based on a single clock cycle dedicated lean instruction set RISC core running at system mains frequency with 2K instruction program ROM and 49 SFR registers and PWM timer/counter, supporting protocol control of 2 I/O pins.

22.1 Main Features
  • RISC core, optimized single cycle bit manipulation instruction set, fully static design.
  • Multiplex 4K bytes of system SRAM as 2K capacity program ROM, supports program pause and dynamic loading.
  • Provide 33 bytes of 1 register each in bidirectional and unidirectional mode, providing 6 levels of independent stacking.
  • Support 2 general purpose bi-directional I/O protocol controls and input level change detection.
  • Support 1- and 2-wire interfaces with multiple protocol specifications by dynamically loading different protocol programs.

22.2 Applications
A wide range of protocol specification target programs are available, dynamically loaded to support the corresponding 1- and 2-wire interfaces.

That's literally all there is. Surprising that they seem to have embedded a whole other microcontroller replete with timer counter, etc.

However, if one goes snooping around the WCH GitHub, they have manuals in Chinese for both the PIOC controller's registers and the PIOC controller's instruction set (dubbed 'WCH-RISC8B'). There's also an assembler ('WASM53B') and a utility to convert assembled binaries into a C include file as hex data. Hopefully we will see English versions of this documentation with time.
 

Offline bingo600

  • Super Contributor
  • ***
  • Posts: 1989
  • Country: dk
Re: $0.2 CH32X033 RISC-V, 62K Flash, 20K SRAM with native USB2.0
« Reply #3 on: January 24, 2024, 03:38:04 pm »
I just tried to build the usb2serial
https://github.com/wagiminator/Development-Boards/tree/main/CH32X033F8P6_DevBoard/software/usb2serial

Using xpack-riscv-none-elf-gcc-13.2.0-2
It barfed at me ..

Code: [Select]
$ make all
Building usb2serial.elf ...
include/system.c: Assembler messages:
include/system.c:330: Error: unrecognized opcode `csrw 0xbc0,a0', extension `zicsr' required
include/system.c:332: Error: unrecognized opcode `csrs mstatus,a0', extension `zicsr' required
include/system.c:334: Error: unrecognized opcode `csrw 0x804,a1', extension `zicsr' required
include/system.c:337: Error: unrecognized opcode `csrw mtvec,a0', extension `zicsr' required
include/system.c:338: Error: unrecognized opcode `csrw mepc,a5', extension `zicsr' required
lto-wrapper: fatal error: riscv-none-elf-gcc returned 1 exit status
compilation terminated.


A bit of googling revealed that the architure options has changed on newer riscv toolchains.

Code: [Select]
#
# https://github.com/riscv-collab/riscv-gnu-toolchain/issues/1280
#CPUARCH  = -march=rv32imac -mabi=ilp32
CPUARCH  = -march=rv32imac_zicsr -mabi=ilp32



And some more PIOC stuff
Code: [Select]
https://github.com/openwch/ch32x035/blob/main/App/01_Snake/code/ch32x035_pioc_ws2812/sdk/Peripheral/inc/PIOC_SFR.h
https://github.com/openwch/ch32x035/blob/main/App/01_Snake/code/ch32x035_pioc_ws2812/src/ws2812/RGB1W.c
https://github.com/openwch/ch32x035/blob/main/App/01_Snake/code/ch32x035_pioc_ws2812/src/ws2812/RGB1W.h
https://github.com/openwch/ch32x035/blob/main/App/01_Snake/code/ch32x035_pioc_ws2812/src/ws2812/RGB1W_inc.h


/Bingo
« Last Edit: January 24, 2024, 04:21:09 pm by bingo600 »
 

Online HwAoRrDk

  • Super Contributor
  • ***
  • Posts: 1478
  • Country: gb
Re: $0.2 CH32X033 RISC-V, 62K Flash, 20K SRAM with native USB2.0
« Reply #4 on: January 24, 2024, 04:39:40 pm »
A bit of googling revealed that the architure options has changed on newer riscv toolchains.

Code: [Select]
#
# https://github.com/riscv-collab/riscv-gnu-toolchain/issues/1280
#CPUARCH  = -march=rv32imac -mabi=ilp32
CPUARCH  = -march=rv32imac_zicsr -mabi=ilp32

That change happened in GCC 12.x I believe. Only about 2 years ago... :P Although, that might as well be yesterday in terms of propagation of changes in GCC. ;D

It's actually mentioned in the xPack release notes: https://xpack.github.io/blog/2022/05/15/riscv-none-elf-gcc-v12-1-0-1-released/#risc-v-isa-updates
 

Offline brucehoult

  • Super Contributor
  • ***
  • Posts: 4039
  • Country: nz
Re: $0.2 CH32X033 RISC-V, 62K Flash, 20K SRAM with native USB2.0
« Reply #5 on: January 24, 2024, 05:42:33 pm »
A bit of googling revealed that the architure options has changed on newer riscv toolchains.

Code: [Select]
#
# https://github.com/riscv-collab/riscv-gnu-toolchain/issues/1280
#CPUARCH  = -march=rv32imac -mabi=ilp32
CPUARCH  = -march=rv32imac_zicsr -mabi=ilp32

That change happened in GCC 12.x I believe. Only about 2 years ago... :P Although, that might as well be yesterday in terms of propagation of changes in GCC. ;D

It's actually mentioned in the xPack release notes: https://xpack.github.io/blog/2022/05/15/riscv-none-elf-gcc-v12-1-0-1-released/#risc-v-isa-updates

They changed the default ISA spec, but you can just tell  recent gcc to use the older one, if you want.

-misa-spec={2.2, 20190608, 20191213}

2.2 (May 2015, pre-ratification) includes zicsr in rv32i.  No post-ratification (June 2019) spec does.

gcc has supported all three specs for quite a few versions now, it's just the default one that changed.

The xpack author clearly doesn't fully understand the issue. While their fix will work it's not the most elegant.
« Last Edit: January 24, 2024, 05:46:16 pm by brucehoult »
 

Offline spostma

  • Regular Contributor
  • *
  • Posts: 118
  • Country: nl
Re: $0.2 CH32X033 RISC-V, 62K Flash, 20K SRAM with native USB2.0
« Reply #6 on: January 24, 2024, 05:53:53 pm »
Very interesting low pincount chip with USB Host/Device, USB PD, 12-bit ADC, DMA, 4x UART!

There is some more information and examples on the PIOC inside the CH32X035EVT Zipfile, see this translated page:
https://bbs-elecfans-com.translate.goog/jishu_2402601_1_1.html?_x_tr_sl=auto&_x_tr_tl=en&_x_tr_hl=en-US&_x_tr_pto=wapp
https://bbs-elecfans-com.translate.goog/jishu_2377106_1_1.html?_x_tr_sl=auto&_x_tr_tl=en&_x_tr_hl=en-US&_x_tr_pto=wapp
https://www.wch.cn/downloads/CH32X035EVT_ZIP.html


 

Offline Sacodepatatas

  • Regular Contributor
  • *
  • Posts: 80
  • Country: es
Re: $0.2 CH32X033 RISC-V, 62K Flash, 20K SRAM with native USB2.0
« Reply #7 on: January 24, 2024, 10:31:37 pm »
Last October I asked Patrick Yang in a private message on the social network that was formerly known as Twitter regarding the PIOC and here is his answer:

 
The following users thanked this post: SiliconWizard

Offline Sacodepatatas

  • Regular Contributor
  • *
  • Posts: 80
  • Country: es
Re: $0.2 CH32X033 RISC-V, 62K Flash, 20K SRAM with native USB2.0
« Reply #8 on: January 24, 2024, 10:46:19 pm »
However, if one goes snooping around the WCH GitHub, they have manuals in Chinese for both the PIOC controller's registers and the PIOC controller's instruction set (dubbed 'WCH-RISC8B'). There's also an assembler ('WASM53B') and a utility to convert assembled binaries into a C include file as hex data. Hopefully we will see English versions of this documentation with time.

I've taken a look at the instruction set, and... Doesn't look like the PIC12/PIC16 instruction set but with different names for the same instruction and registers?? For example, the W register in a PIC would be the A register in the PIOC...
 

Online HwAoRrDk

  • Super Contributor
  • ***
  • Posts: 1478
  • Country: gb
Re: $0.2 CH32X033 RISC-V, 62K Flash, 20K SRAM with native USB2.0
« Reply #9 on: January 25, 2024, 07:56:53 am »
I wonder if the PIOC CPU core is the same as (or a variant of) that used in the older CH53x microcontrollers? Given the filename of the assembler is "WASM53B"...
 

Offline c64

  • Frequent Contributor
  • **
  • Posts: 298
  • Country: au
Re: $0.2 CH32X033 RISC-V, 62K Flash, 20K SRAM with native USB2.0
« Reply #10 on: January 27, 2024, 05:54:21 am »
I checked the price on Taobao, it's around 1.4 CNY (0.2 USD), in fact, it's even cheaper than a CH340N, which costs around 1.5 CNY.
This makes it particularly appealing, as you don't need any additional USB2TTL chips when working on small USB applications.
Is it the only option to buy them in China? From random taobao seller?

I checked out the official taobao store and they only have development boards and programming cables
 

Offline westfw

  • Super Contributor
  • ***
  • Posts: 4199
  • Country: us
Re: $0.2 CH32X033 RISC-V, 62K Flash, 20K SRAM with native USB2.0
« Reply #11 on: January 27, 2024, 06:43:44 am »
Quote
Is it the only option to buy them in China? From random taobao seller?
It looks like the "Official WCH store" on Aliexpress has the ch32x035 variety (actually, several different packages.)
20 chips for about $9, though.https://www.aliexpress.us/item/3256805471117452.html

 

Offline c64

  • Frequent Contributor
  • **
  • Posts: 298
  • Country: au
Re: $0.2 CH32X033 RISC-V, 62K Flash, 20K SRAM with native USB2.0
« Reply #12 on: January 27, 2024, 07:19:55 am »
I don't think chinese buy on Aliexpress
 

Offline martinribelotta

  • Regular Contributor
  • *
  • Posts: 56
  • Country: ar
  • A camel is a horse designed by a committee
    • Martin Ribelotta design services
Re: $0.2 CH32X033 RISC-V, 62K Flash, 20K SRAM with native USB2.0
« Reply #13 on: January 27, 2024, 01:12:29 pm »
Quote
I don't think chinese buy on Aliexpress

Mainly, chinese speaker/reader use taoboa:
https://world.taobao.com/

That is owned by Alibaba (same owner of aliexpress)
 

Offline c64

  • Frequent Contributor
  • **
  • Posts: 298
  • Country: au
Re: $0.2 CH32X033 RISC-V, 62K Flash, 20K SRAM with native USB2.0
« Reply #14 on: January 27, 2024, 10:07:37 pm »
I already found their official shop. No chips

https://shop137880236.taobao.com/
 

Online SiliconWizard

  • Super Contributor
  • ***
  • Posts: 14481
  • Country: fr
Re: $0.2 CH32X033 RISC-V, 62K Flash, 20K SRAM with native USB2.0
« Reply #15 on: January 27, 2024, 11:16:36 pm »
Quote
Is it the only option to buy them in China? From random taobao seller?
It looks like the "Official WCH store" on Aliexpress has the ch32x035 variety (actually, several different packages.)
20 chips for about $9, though.https://www.aliexpress.us/item/3256805471117452.html

Yes, as I mentioned in my first post, it's available on Aliexpress for us westerners.
As I also mentioned, this series of ICs is the CH32X035, with the CH32X033 being the lowest end of the series with no support for USB-PD. So it's not surprising that the CH32X305, with USB-PD support, is a bit more expensive.
$0.45/piece for low quantitites is still a pretty good price for the specs. The CH32X033 is also available on Aliexpress, for about $0.3/piece in low quantities.
 

Offline bingo600

  • Super Contributor
  • ***
  • Posts: 1989
  • Country: dk
Re: $0.2 CH32X033 RISC-V, 62K Flash, 20K SRAM with native USB2.0
« Reply #16 on: March 06, 2024, 02:40:11 pm »
I just got 20 of these, from ali ....

Anyone else playing with them yet ?

/Bingo
 

Online Atlan

  • Frequent Contributor
  • **
  • Posts: 334
  • Country: sk
Re: $0.2 CH32X033 RISC-V, 62K Flash, 20K SRAM with native USB2.0
« Reply #17 on: March 09, 2024, 09:44:22 pm »
I installed their IDE, after the update it went wrong, so I uninstalled and installed again, I refused the update.  So I could finally start doing something, after a few code edits, it went wrong.  The program translated, uploaded and did not work.  I created a new project and copied the files.  It started working.  I don't have big plans yet.  And I'm on the lowest line, 003. Affordable, and especially pin and voltage compatible, so I didn't have much choice.
FNIRSI 1013D Always provide a picture or video with the problem where the parameters of the oscilloscope are visible, and a picture of the diagnostic screen with the values.
 

Online SiliconWizard

  • Super Contributor
  • ***
  • Posts: 14481
  • Country: fr
Re: $0.2 CH32X033 RISC-V, 62K Flash, 20K SRAM with native USB2.0
« Reply #18 on: March 09, 2024, 10:40:49 pm »
And I'm on the lowest line, 003.

Note that what I suppose is the CH32V003, if that's indeed what you have here, has nothing (well, probably not nothing of course, but it's not the same series and is still different) to do with the CH32X033/34/35 series which is the topic of this thread. The CH32V003 has been talked about in other threads though.

I have no experience with what I suppose is the Mounriver IDE, as I've used makefiles and gcc directly for WCH MCUs, so I don't know how robust it is or whether there are quirks on some OSs, which I wouldn't be completely surprised about though.
 

Offline IOsettingTopic starter

  • Regular Contributor
  • *
  • Posts: 56
  • Country: cn
Re: $0.2 CH32X033 RISC-V, 62K Flash, 20K SRAM with native USB2.0
« Reply #19 on: March 11, 2024, 09:35:28 am »
Stefan has post some interesting projects of CH32X033
https://hackaday.io/project/195160-ch32x033-usb-knob
https://hackaday.io/project/195159-ch32x033-usb-to-nrf

I have soldered a little EVB weeks ago and run a couple of examples from WCH https://www.wch.cn/downloads/CH32X035EVT_ZIP.html, to verify the USB functionality, but I haven't got time to play further.


I just got 20 of these, from ali ....

Anyone else playing with them yet ?

/Bingo
 
The following users thanked this post: bingo600

Offline bingo600

  • Super Contributor
  • ***
  • Posts: 1989
  • Country: dk
Re: $0.2 CH32X033 RISC-V, 62K Flash, 20K SRAM with native USB2.0
« Reply #20 on: March 11, 2024, 02:32:52 pm »
Stefan has post some interesting projects of CH32X033
https://hackaday.io/project/195160-ch32x033-usb-knob
https://hackaday.io/project/195159-ch32x033-usb-to-nrf

I have soldered a little EVB weeks ago and run a couple of examples from WCH https://www.wch.cn/downloads/CH32X035EVT_ZIP.html, to verify the USB functionality, but I haven't got time to play further.


I just got 20 of these, from ali ....

Anyone else playing with them yet ?

/Bingo

I'll be trying this one asap (have to solder mcu to an adapter etc ...) , but have something else to do in the weekend.
https://github.com/wagiminator/Development-Boards/tree/main/CH32X033F8P6_DevBoard/software/usb2serial

/Bingo
 

Offline tom66

  • Super Contributor
  • ***
  • Posts: 6709
  • Country: gb
  • Electronics Hobbyist & FPGA/Embedded Systems EE
Re: $0.2 CH32X033 RISC-V, 62K Flash, 20K SRAM with native USB2.0
« Reply #21 on: March 11, 2024, 03:36:10 pm »
I find the use of USB2.0 curious.  What is there that you can do at >12Mbps with a 48MHz clock...  I guess as long as you can process each byte in 32 instruction cycles, but I can't think of many use cases.  Perhaps it's just so cheap nowadays to put a USB2.0 transceiver on something that it doesn't make any difference.
 

Online SiliconWizard

  • Super Contributor
  • ***
  • Posts: 14481
  • Country: fr
Re: $0.2 CH32X033 RISC-V, 62K Flash, 20K SRAM with native USB2.0
« Reply #22 on: March 11, 2024, 09:08:04 pm »
You are conflating USB 2.0 and USB HS. These MCUs do comply with USB 2.0 but only in FS, obviously. USB 2.0 includes HS, but is also backwards compatible and introduced a few things that were not related to the communication speed either. USB 2.0 doesn't mean USB HS.
 

Offline Nominal Animal

  • Super Contributor
  • ***
  • Posts: 6264
  • Country: fi
    • My home page and email address
Re: $0.2 CH32X033 RISC-V, 62K Flash, 20K SRAM with native USB2.0
« Reply #23 on: March 11, 2024, 10:37:28 pm »
I find the use of USB [HS] curious.  What is there that you can do at >12Mbps with a 48MHz clock...  I guess as long as you can process each byte in 32 instruction cycles, but I can't think of many use cases.
Lots, from HID devices like keyboards, mice, joysticks, to USB serial adapters and bridges to other buses, to debugging and development tools; and no, that's not how it works.

First, the USB full-speed (12 Mbit/s including overhead) device peripheral handles entire packets between zero and 64 bytes long.  It is not like an UART where you receive one byte at a time.  Furthermore, it handles the "header" part of each packet, directing the packet to a specific endpoint (numbered, described in the USB device descriptor), so that you really only need to handle the data part of each packet only.

It is much closer to network datagram programming than working with a data stream byte at a time, really.  It also means there is no inter-byte timing issues; you only need to handle each full packet.

What to use these devices for?  Lots.
  • Any kind of standard driverless human interface device (HID), like keyboard, mice, joystick, gamepads, touchpads et cetera.  The data protocol is simple and easy (except Microsoft as usual requiring odd quirks and special dispensation, because its built-in drivers are odd and not very intelligent), and is thoroughly documented (except for the Microsoft silliness, which you need to consult Microsoft for).  My very first microcontroller project was actually an arcade game controller on a 50cm×20cm / 20"×8" birch board using a Teensy 2.0++ AVR microcontroller (AT90USB1280) appearing as a keyboard (with several different sets of keys the joystick and buttons generated) that I used to play online Flash puzzle platformer games.

    If you've ever been annoyed at your preferred applications for not having better shortcuts, perhaps want better 3D rotation in CAD/CAM, or better 2D scrolling/panning, you could have solved that with a microcontroller with native USB for USB HID, and a suitable set of buttons, potentiometers, encoders, or even magnetic field sensors.  And a 3D printer to make a nice enclosure for it.  One of my forever projects is an e-Ink display with a capacitive touch panel, for a programmable physical toolbar (generating application-specific shortcut keypresses), for example.
     
  • Any kind of data bridge between a computer and external device, from UART/Serial, I2C, SPI to GPIO.  Unlike the FTDI devices, these can be programmed with additional logic, for example to do any timing-sensitive stuff, or provide an unified interface across similar but incompatible devices.  For example, consider small display controllers, for example OLED display controllers, that provide an unified interface over USB Serial (i.e., appear as if serial ports) using a standardized format –– compare to AT command set for modems –– to query the display properties (flashed to the microcontroller) and to control the display contents.  If HID devices are my favourite use case, this has to be the second-favourite one.  It is an extremely easy way to add a display to Linux SBCs and appliances, as this way I don't need to hope for an exposed UART not already used for a terminal console, and can use an USB HUB to trivially add more than one device and not lose connectivity.
     
  • Debugging and driver development for USB-connected devices.  I do prefer to use Teensies with lots of RAM and Flash for this, because that way it is trivial to "replay" even long "USB conversations" with predefined response delays, recorded using Wireshark etc. when a device is talking to its Windows closed-source and buggy drivers, to write my own.  I've done this for Silhouette Cameo vinyl cutters, without having any kind of access to one, but a friend in Canada – across the pond – having one, and doing experiments I request, recording the communication between the Windows driver/application and device, sending the log to me, and me examining and writing a Linux userspace driver.
     
  • Quick purpose-designed tools to solve a problem without having to buy expensive test equipment.  For example, to explore exposed pins on appliances like routers and TV boxes, one can use an expensive oscilloscope and logic analyzer setup with all sorts of decoders to probe if useful stuff like console UART is exposed; or you can use a few dollar native-USB microcontroller (possibly using a cheap $8 ADuM3160 USB isolator from eBay for isolating the microcontroller from the computer it is connected to, allowing grounding it to the appliance ground) and write a throwaway firmware to start with an ADC probe.  When you find a pin with interesting flicker patterns, use a voltage level translator (I recommend TI TXU0n0m for all but I2C, and dedicated ones like PCA9306 for I2C), and connect the pins to the microcontroller peripheral.
What I do not understand, is why anyone would use a microcontroller without a native USB peripheral, and instead work with problematic USB-to-serial bridges and whatnot.  The popularity of ATmega328/ATmega328p in particular baffles me, as there are several AVRs only a little more expensive but much more useful with native USB support.  (ATmega32u4 is my favourite, but I do like both ATmega8/16/32u series and AT90USB series.)
For those preferring PICs over AVRs, the USB ones exist too, starting at PIC16F1454 (under 1.5€ in singles at Mouser).
For those preferring 8051 (MCS-51) cores, there are CH55x programmable with open source tools.
For those preferring ARM Cortex M cores, just about all manufacturers have these, many with Arduino cores for even quicker development (for debugging and throwaway/single-use tools).

My preferred combo is having one (or more, because Windows) HID endpoint, and one or more USB Serial endpoints for bulk data.  You can use Force Feedback HID messages or raw HID messages to configure the HID device from an userspace GUI application (easy to do in e.g. Python), although I like to use the USB Serial for this (but via termios and termios.tty Python interfaces on all non-Windows OSes, and not pyserial or similar).  An extremely typical use case is to remap the arcade plank to a different set of keypresses at run time.  In Linux/BSDs/macOS/Android this is very easy and needs no drivers at all; it is only Windows that requires special care, but fortunately I don't use Windows and thus don't need to care.

8)
« Last Edit: March 11, 2024, 10:39:01 pm by Nominal Animal »
 


Share me

Digg  Facebook  SlashDot  Delicious  Technorati  Twitter  Google  Yahoo
Smf