Most of the time in MuffinTerm, you’ll be interacting with the terminal. This is where the action is! Things that you type here are sent to the BBS; things from the BBS are displayed to the screen.
The terminal emulates traditional text-mode hardware from PCs in the dial-up BBS era to faithfully recreate the BBS experience on modern systems. You can select from several video modes, and can even enable some special effects to boost the nostalgia.
The terminal itself always maintains a 4:3 aspect ratio (i.e., 75% as tall as it is wide), like the video hardware that it emulates. The character and pixel resolutions vary by video mode; in general, the pixels themselves are non-square. The blink rate of the cursor and blinking text (if any is onscreen) will vary by video mode as well, since the real hardware ran at different refresh rates in different modes. Most modes use the CP437 charater set, with pixel maps matching those generated by the respective hardware; the VIC-II modes use the PETSCII character sets as they appeared on the Commodore 64, and the ANTIC video modes use the ATASCII character set as originally seen on the Atari 400/800.
On macOS, you can switch the video mode of a terminal via the Console → Video Mode menu. On iOS/iPadOS, you use the video button on the button bar. (See the interface page for details.)
MDA (Monochrome Display Adapter) — Simulates the original Monochrome Display Adapter from 1981. Text resolution is 80 columns wide and 25 rows high. Three versions of this mode can be selected, simulating a black-and-white (P4 phosphor), amber (P3 phosphor), or classic green screen (P31 phosphor).
CGA (Color Graphics Adapter) — Simulates the Color Graphics Adapter released (along with the MDA) with the original PC in 1981. You can select between 40-columm mode and 80-column mode; both modes are 25 lines tall.
EGA (Enhanced Graphics Adapter) — Simulates the EGA released in 1984. Two EGA modes are available, 25-line and 43-line. Both modes are 80 columns wide.
VGA (Video Graphics Array) — Simulates the VGA adapter released in 1987. Two VGA modes are avilable, 25-line and 50-line. Both modes are 80 columns wide.
VIC-II (Video Interface Chip II) — Simulates the VIC-II (MOS Technology 6567/6569) video generator chip, originally released in 1982 with the C64. As part of a home computer system, the VIC-II was designed for use with a television set; the output generated was slightly different depending on the regional video standard used. You can select either NTSC or PAL modes to reproduce the aspect ratio and screen borders that the chip generated for the respective television standards, or a borderless mode that uses the full 4:3 window/screen area, as might be seen with a direct monitor connection (or an adjusted television set). All modes are 40×25, 16-color modes.
ANTIC (Alphanumeric Television Interface Controller) — Simulates the ANTIC and CTIA/GTIA character video circuitry, originally released in 1979 and used with several 8-bit systems of the era. As with the VIC-II, the ANTIC was designed to be used with a television set. You can select from NTSC or PAL modes to reproduce the aspect ratios and borders of those video standards, or use a borderless mode to use the full 4:3 window/screen area. The ANTIC modes are 40×24 monochrome modes. Depending on the default terminal color that you have selected in preferences, these modes will display either as grey on black or as light blue on dark blue, reflecting the most common monochrome text palettes used on the original systems.
You can also enable various visual effects to make your display look more like a classic CRT of the era. On macOS, these are toggled via the Console → CRT Effects submenu; on iOS/iPadOS, they are located under the video button alongside the video modes.
CRT (tube) curvature — This option slightly distorts the display, “rounding” it to simulate how an image typically could look on a CRT monitor.
Scan lines — This option enables simulated scan lines to enhance the feel of using classic hardware.
Warm tint — This option slightly tints the color towards a redder, more “warm” hue, reminiscent of older televisions and color monitors that could sometimes had trouble reproducing a proper white-balanced appearance. Only available in color video modes.
VIC-II luma bars — This option reproduces the characteristic interference pattern (sometimes referred to as “jail bars”) that the VIC-II video chip could exhibit due to poorly isolated clock lines bleeding over into the luminance signal. Only available in VIC-II video modes.
Overscan — CRT-based television systems typically exhibited overscan, with the displayed video signal “spilling over” beyond the visible edges of the screen. This was by design, and home computers of the era generated fairly large blank borders around the active text area to prevent characters from being cut off by the physical bounds of the picture tube. When overscanning is enabled (the default), the borders shown will be reduced to approximate how the picture would appear on a television (resulting in more of the screen space being used by the actual text area); when this option is disabled (no overscan), the full video area will be shown, resulting in larger borders around the main terminal area. This option is only available in NTSC and PAL video modes.
With dial-up modems, the speed of data over the phone line was slow enough that you could watch the characters fill the screen—sometimes quite slowly, depending on the hardware and line conditions. Although MuffinTerm can transfer data as quickly as your modern high-speed connection can handle, it can still be nice to slow things down a bit at times. In addition to aesthetics, this could also be helpful with certain ANSI animations, where a full-speed connection might be so fast that you never see the actual animation!
When a modem speed is selected, MuffinTerm will restrict data throughput to resemble the speed typically experienced over a dial-up connection. You can select from among these speeds most commonly used by modems: 110, 300, 1200, 2400, 9600, 14400, 28800, 33600, or 56000 bps.
The terminal’s emulation mode determines how it will interpret special control characters and sequences for controlling things like cursor position, text color, etc. You can select between ANSI, PETSCII, ATASCII, TTY (ASCII), or raw mode.
ANSI emulation is used by the vast majority of BBSes. The parser in MuffinTerm largely conforms to a state machine of the DEC VT-series terminals, with functionality described by the ECMA-48 standard, with various adjustments to handle certain variations seen with BBS software over the years. A few of these compatibility flags can be toggled on a per-BBS basis; see the dialing directory page for details.
PETSCII was the native mode of home computers produced by Commodore International in the 1980s—most notably, the Commodore 64 released in 1982, which become one of the most popular computers of the decade. Many C64-focussed BBSes still use PETSCII, with its unique color palette and distinctive character set.
ATASCII was the native mode of 8-bit computers produced by Atari, Inc., starting with the Atari 400 and 800 in 1979 and continuing through the next decade. ATASCII is a monochrome format; depending on the default terminal color configured in preferences, MuffinTerm will use either a light-blue-on-dark-blue or a grey-on-black appearance, the two most popular schemes used on the original systems. Creative users often put the ATASCII graphical character set and cursor control sequences to use, building characteristic “break movie” animations and screen art for ATASCII-centric BBSes.
TTY (ASCII) mode is a much more basic mode, for use with systems that don’t support ANSI (mostly older or special-purpose systems or ones running on very limited hardware). In TTY mode, the terminal will recognize NUL, BEL, BS, TAB, LF, FF, and CR, and treat them according to the usual fashion; other characters will be printed without any further processing.
Raw mode is intended mostly for network debugging tasks. It’s based on the “monitor mode” of the venerable Procomm Plus software. In this mode, all characters are displayed as their CP437 glyphs (when using a PC video mode) or C64 screen bytes (when using a C64 video mode); no control characters or escape sequences are interpreted at all, except for the following on PC modes only: NUL is shown as a reverse-video zero; ESC is shown as a reverse-video left-arrow; and 0xFF is shown as a reverse-video question mark.
Normally, you will configure the emulation mode on a per-BBS basis via the dialing directory entry for a given BBS; but you can also adjust it at any time (if for example the BBS requires a different mode than you expected). On macOS, you can use the Console → Terminal Emulation menu. On iOS/iPadOS, you can use the ⌘T keyboard shortcut to cycle through the modes. The currently selected mode will be shown in the status line.
The local echo mode controls whether characters that you type are automatically echoed (printed to the screen). Normally when connecting to a BBS, you will not want characters to be locally echoed—the BBS itself will send characters back to be printed when appropriate. However, some systems require that local echo be enabled; and some systems fail to properly negotiate the TELNET echo option, resulting in local echo being enabled when it should not be. You will typically know that local echo is amiss if everything that you type appears doubled (two copies of each character appear), or if you type and nothing at all appears when you expect that it should.
The echo mode can be set to “automatic” (follows the negotiated option based on the TELNET protocol; for non-TELNET connections, local echo is disabled by default); “always” (enables local echo regardless of the negotiated option); or “never” (disables local echo regardless of the negotiated option). You can set this on a per-BBS basis via the dialing directory. You can also select the option for the current terminal via the Console → Terminal Emulation → Local Echo menu on macOS, or cycle through the modes via the ⌘E keyboard shortcut on iOS/iPadOS. The currently selected mode will be shown in the status line.
In PETSCII mode, or when using a VIC-II (C64) video mode, two different character sets are available: An uppercase-only set with various graphical glyphs, and a second set that includes lowercase letters and a different, more limited set of graphical shapes. A PETSCII BBS normally sends control sequences to switch between character sets automatically when needed in order to draw screen contents; but you can also manually switch between character sets using the ⌥⌘C key combination; or via the Console → Terminal Emulation → Toggle PETSCII Case menu option on macOS.
On iOS, if you have the accessory key row enabled in preferences, then a special mode-switching button is available: When you press CTL while in a PETSCII/VIC-II mode, the ESC key will temporarily change to “A | B”. Pressing this will then switch the case. (This button is also used in ATASCII modes to toggle reverse input mode. If you’re using ATASCII emulation in a VIC-II video mode, then the PETSCII case functionality takes precedence.)
Note that in VIC-II video modes, as on the original 1982 hardware, toggling the case will immediately switch all characters on the screen (including in the backscroll buffer) to the new appearance. In PC video modes, toggling the case will affect how future bytes are interpreted, but will not affect characters already onscreen.
In ATASCII, it’s possible to send reverse-video versions of most characters by setting the high bit of the byte. To toggle reverse input in ATASCII mode, press Control-Tab, or use the Console → Terminal Emulation → Reverse ATASCII Input menu option on macOS. On iOS, you can also toggle reverse mode via the optional accessory key row: Press CTL on the accessory row, and the ESC key will temporarily change to “A | B”; press this to toggle reverse mode. Note that you can only enable reverse input while connected to a BBS; input will always use normal mode when offline.
You can switch between a block-style cursor or an underline-style cursor. The specific hight and pixel rows lit for each cursor will vary by video mode. On iOS/iPadOS, this is selected via the preferences panel; on macOS, it can be set on a per-window basis via the Console → Cursor Style menu. Note that in C64 video modes, as on the original hardware, the cursor works differently, and both underline and block modes will appear the same in those video modes.
The status line (described in more detail on the interface overview page) can be hidden if desired. When the status line is hidden, an extra row of text is available in the main terminal window. (The actual size of the screen doesn’t change.) Some BBSes might require this; if things look “off” by a line when using a particular BBS, check if it might require a full-height screen (25 lines in most video modes).
You can pause or unpause incoming text via the ⌘; (Command-semicolon) keyboard shortcut. On macOS, it can also be toggled via the Console → Pause (or Resume) Incoming menu command. If you scroll back into the screen history, the console will automatically pause; unpausing while scrolling will return the scrolling position to the current (bottom-most) line.
If any text has scrolled off the top of the screen, you can scroll back to see it. On macOS, you can use the scroll gesture or scroll wheel of your input device; on iOS/iPadOS, swipe up or down on the screen to scroll.
The backscroll buffer will keep up to 9,999 lines of text; after this, the oldest lines will be discarded to make room for new ones. When scrolling, the status line (if visible) will show how many lines back you are currently viewing when scrolling.
You can select text using the usual input method (click-and-drag on macOS, touch-hold-and-drag on iOS). You can copy selected text with the standard ⌘C keyboard shortcut, or via the Edit menu in macOS. On iOS/iPadOS, the standard copy/paste text action popup will automatically appear. Clicking or selecting without dragging over a full character will deselect any selected text, as will entering any text input. You can’t select more than one screenful of text at a time.
You can paste text into the terminal using the standard ⌘V keyboard shortcut, or via the Edit menu on macOS. On iOS/iPadOS, you can also long-press without selecting any text and use the Paste command from the text action popup. If you try to paste more than one line of text, or a single line that’s 200 or more characters long, then MuffinTerm will prompt you for confirmation before sending the text.
If you’d like to clear the screen, reset the terminal colors, etc., you can reset the terminal via the ⌘R keyboard shortcut. On macOS, you can also use the Console → Reset Terminal menu command. On iOS, you can use the reset button on the button bar, or shake the device (if that option is enabled). You can also configure MuffinTerm to automatically reset the terminal on every new connection, via preferences.
Sometimes you might want to send a specific control character to the remote host. To send a control character, simply press Control along with a corresponding key to send a control code. For example, press Control-C to send a 0x03 byte. You can also send a high-bit control character (C1 set, 0x80 through 0x9F) by holding down Option (⌥) while typing the control sequence (for example, Control-Option-C to send 0x83). (In ANSI modes, these are just regular printable glyphs; but in PETSCII and ATASCII, some of these are used for various control functions.)
On iOS, if you do not have an external keyboard, you can still type control characters by using the optional accessory keyboard row, enabled via preferences. Press the CTL key and then press a regular key to send a control code; a BIT key will also be shown when CTL is enabled, for setting the high bit. (So, for example, to send 0x83, you would press CTL, then BIT, and then C.)
Another special key that some systems might require is DEL (ASCII 0x7F). Normally, MuffinTerm treats the Backspace and Delete keys (if your keyboard has both) identically, generating the same code for either key (0x08 in CP437 modes, 0x14 in PETSCII, or 0x7E in ATASCII). If you specifically need to generate DEL instead of BS, you can press Control-Backspace or Control-Delete. This will send ASCII DEL (0x7F) in CP437-based modes or Delete Character (0xFE) in ATASCII. (PETSCII doesn’t have a second delete code, so it sends the normal PETSCII DEL (0x14) regardless of Control status.) Note that 0x7F is normally treated as a printable glyph in CP437 modes; but some systems might use it for an alternative delete function.
On PETSCII, eight of the control characters corresond to numbered function keys. You can send F1 through F8 either by typing the actual function key (if your keyboard has one), or by typing ⌥⌘1 through ⌥⌘8. On macOS, you can also send a function key, color code, or various PETSCII or ATASCII commands via the Edit → PETSCII Special Key and Edit → ATASCII Special Key submenus (when the terminal is set to the corresponding emulation mode).
When you’re at the terminal but not connected to a BBS, MuffinTerm is said to be in “terminal mode,” waiting for you to type some input. There are a few commands that you can use here.
clear, cls, or reset — Clears the screen, resets the terminal attributes, and empties the backscroll buffer. This is equivalent to selecting the Reset Terminal option.
help or ? — Opens this help documentation in your preferred browser.
telnet (hostname) [port] — Opens a telnet connection to the given hostname (or IP address) and port. If the port is omitted, it defaults to 23. If the hostname and port match a BBS from the dialing directory (or call history), then the BBS-specific settings for that BBS will be loaded, as if the BBS were selected directly from the dialing directory.
socket (or tcp) (hostname) (port) — Opens a basic TCP connection to the specified host and port. (The port number is required with this command.)
In the dial-up days, the user would be able to enter modem commands in terminal mode. These would most commonly be Hayes (“AT”) commands. For example, one might type ATH1 to take the phone line off hook, or ATDT5550193 to dial a specific phone number. MuffinTerm doesn’t connect to an actual modem, but you could try playing around with some of these….
iCloud, iPad, iPadOS, iPhone, Mac, macOS, and Metal are registered trademarks or service marks of Apple Inc. IOS is a trademark or registered trademark of Cisco in the U.S. and other countries and is used under license. Unicode is a registered trademark of Unicode Inc. Android is a tradmark of Google LLC. MuffinTerm is a trademark of Molly Black.