This is a fork of the RetroWiFiModem project for building an Amstrad PCW8256/8512 Wifi Modem, most notably without the need for an add-on RS232 interface such as the CPS8256.
You can find the firmware, schematics and BOM in this repository
There is a Wiki here: https://github.com/VapourSoft/PCWWiFiModem/wiki with build and usage instructions
For a ready made PCB you can try: https://www.ebay.co.uk/sch/i.html?_nkw=pcw+wifi+modem
The hardware has been designed and tested in conjuction with the firmware here, but other ESP8266 modem firmware should work if it uses the D1 mini's TX/RX (and CTS/RTS if needed) pins.
Warning: Never attach or remove peripherals from the PCW expansion port while the machine is switched on!
The default serial configuration is 9600bps, 8 data bits, no parity, 1 stop bit.
If using 9600 baud or higher it is recommended that you enable hardware flow control, and use CP/M 1.7 or later.
Here's the commands you need to set up the modem to automatically connect to your WiFi network:
AT$SSID=your WiFi network name
to set the WiFi network that the modem will connect to when it powers up.AT$PASS=your WiFi network password
to set the password for the network.ATC1
to connect to the network.- Optional stuff:
AT$SB=speed
to set the default serial speed.AT$SU=dps
to set the data bits, parity and stop bits.ATNETn
to select whether or not to use Telnet protocol.AT&Kn
to use RTS/CTS flow control or not.
AT&W
to save the settings.
Once you've done that, the modem will automatically connect to your WiFi network on power up and will be ready to "dial up" a connection with ATDT.
Multiple AT commands can be typed in on a single line. Spaces between commands are allowed, but not within commands (i.e. AT S0=1 X1 Q0 is fine; ATS 0= 1 is not). Commands that take a string as an argument (e.g. AT$SSID=, AT$TTY=) assume that everything that follows is a part of the string, so no commands are allowed after them.
Command | Details |
---|---|
+++ | Online escape code. Once your modem is connected to another device, the only command it recognises is an escape code of a one second pause followed by three typed plus signs and another one second pause, which puts the modem back into local command mode. |
A/ | Repeats the last command entered. Do not type AT or press Enter. |
AT | The attention prefix that precedes all command except A/ and +++. |
AT? | Displays a help cheatsheet. |
ATA | Force the modem to answer an incoming connection when the conditions for auto answer have not been satisfied. |
ATC? ATCn |
Query or change the current WiFi connection status. A result of 0 means that the modem is not connected to WiFi, 1 means the modem is connected. The command ATC0 disconnects the modem from a WiFi connection. ATC1 connects the modem to the WiFi. |
ATDSn | Calls the host specified in speed dial slot n (0-9). |
ATDT[+=-]host[:port] | Tries to establish a WiFi TCP connection to the specified host name or IP address. If no port number is given, 23 (Telnet) is assumed. You can also use ATDT to dial one of the speed dial slots in one of two ways:
|
ATE? ATEn |
Command mode echo. Enables or disables the display of your typed commands.
|
ATGEThttp://host[/page] | Displays the contents of a website page. https connections are not supported. Once the contents have been displayed, the connection will automatically terminate. |
ATH | Hangs up (ends) the current connection. |
ATI | Displays the current network status, including sketch build date, WiFi and call connection state, SSID name, IP address, and bytes transferred. |
ATNET? ATNETn |
Query or change whether telnet protocol is enabled. A result of 0 means that telnet protocol is disabled; 1 is Real telnet protocol and 2 is Fake telnet protocol. If you are connecting to a telnet server, it may expect the modem to respond to various telnet commands, such as terminal name (set with AT$TTY ), terminal window size (set with AT$TTS ) or terminal speed. Telnet protocol should be enabled for these sites, or you will at best see occasional garbage characters on your screen, or at worst the connection may fail.The difference between real and fake telnet protocol is this: with real telnet protocol, a carriage return (CR) character being sent from the modem to the telnet server always has a NUL character added after it. The implementation of the telnet protocol used by some BBSes doesn't properly strip out the NUL character. When connecting to such BBSes, use fake telnet. When using real telnet protocol, when the telnet server sends a CR character followed by a NUL character, only the CR character will be sent to the serial port; the NUL character will be silently stripped out. With fake telnet protocol, the NUL will be passed through. |
ATO | Return online. Use with the escape code (+++) to toggle between command and online modes. |
ATQ? ATQn |
Enable or disable the display of result codes. The default is Q0.
|
ATRD ATRT |
Displays the current UTC date and time from NIST in the format YY-MM-DD HH:MM:SS. A WiFi connection is required and you cannot be connected to another site. |
ATS0? ATS0=n |
Display or set the number of "rings" before answering an incoming connection. Setting S0=0 means "don't answer". |
ATV? ATVn |
Display result codes in words or numbers. The default is V1.
|
ATX? ATXn |
Control the amount of information displayed in the result codes. The default is X1 (extended codes).
|
ATZ | Resets the modem. |
AT&F | Reset the NVRAM contents and current settings to the sketch defaults. All settings, including SSID name, password and speed dial slots are affected. |
AT&K? AT&Kn |
Data flow control. Prevents the modem's buffers for received and transmitted from overflowing.
|
AT&R? AT&R=server pwd |
Query or change the password for incoming connections. If set, the user has 3 chances in 60 seconds to enter the correct password or the modem will end the connection. |
AT&Vn | Display current or stored settings.
|
AT&W | Save current settings to NVRAM. |
AT&Zn? AT&Zn=host[:port],alias |
Store up to 10 numbers in NVRAM, where n is the position 0-9 in NVRAM, and host[:port] is the host string, and alias is the speed dial alias name. The host string may be up to 50 characters long, and the alias string may be up to 16 characters long. Example: AT&Z2-particlesbbs.dyndns.org:6400,particles This number can then be dialed in any of the following ways:
|
AT$AE? AT$AE=startup AT cmd |
Query or change the command line to be executed when the modem starts up. |
AT$BM? AT$BM=server busy msg |
Query or change a message to be returned to an incoming connection if the modem is busy (i.e. already has a connection established). |
AT$MDNS AT$MDNS=mDNS name |
Query or change the mDNS network name (defaults to "espmodem"). When a non zero TCP port is defined, you can telnet to that port with telnet mdnsname.local port. |
AT$PASS? AT$PASS=WiFi pwd |
Query or change the current WiFi password. The password is case sensitive. Clear the password by issuing the set command with no password. The maximum length of the password is 64 characters. |
AT$SB? AT$SB=n |
Query or change the current baud rate. Valid values for "n" are 110, 300, 450, 600, 710, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 76800 and 115200. Any other value will return an ERROR message. The default baud rate is 1200. The Retro WiFi modem does not automatically detect baud rate like a dial-up modem. The baud rate setting must match that of your terminal to operate properly. It will display garbage in your terminal otherwise. |
AT$SP? AT$SP=n |
TCP server port to listen on. A value of 0 means that the TCP server is disabled, and no incoming connections are allowed. |
AT$SSID? AT$SSID=ssid name |
Query or change the current SSID to the specified name. The given SSID name is case sensitive. Clear the SSID by issuing the set command with no SSID. The maximum length of the SSID name is 32 characters. |
AT$SU? AT$SU=dps |
Query or change the current number of data bits ('d'), parity ('p') and stop bits ('s") of the serial UART. Valid values for 'd' are 5, 6, 7 or 8 bits. Valid values for 'p' are (N)one, (O)dd or (E)ven parity. Valid values for 's' are 1 or 2 bits. The default settings are 8N1. The UART setting must match your terminal to work properly. |
AT$TTL? AT$TTL=telnet location |
Query or change the Telnet location value to be returned when the Telnet server issues a SEND-LOCATION request. The default value is "Computer Room". |
AT$TTS? AT$TTS=WxH |
Query or change the window size (columns x rows) to be returned when the Telnet server issues a NAWS (Negotiate About Window Size) request. The default value is 80x24. For terminals that are smaller than 80x24, setting these values appropriately will enable paging on the help (AT?) and network status (ATI) commands. |
AT$TTY? AT$TTY=terminal type |
Query or change the terminal type to be returned when the Telnet server issues a TERMINAL-TYPE request. The default value is "ansi". |
AT$W? AT$W=n |
Startup wait.
|
Please refer to the wiki: https://github.com/VapourSoft/PCWWiFiModem/wiki/Hardware-Assembly
Pre-built firmware can be downloaded from https://github.com/VapourSoft/PCWWiFiModem/releases please see: https://github.com/VapourSoft/PCWWiFiModem/wiki/Flashing-the-firmware for instructions on how to flash the D1 mini.
If you want to build the firmware, instead of using pre-built ones please see: https://github.com/VapourSoft/PCWWiFiModem/wiki/Advanced:-Building-the-Firmware-(optional)
Thanks to the cool RetroWifiModem project! Please see the RetroWifiModem project for more information on the RetroWiFiModem including it's history, contributors and original hardware.