Terminal program for MailStation devices
at master 204 lines 5.6 kB view raw
1/* 2 * msTERM 3 * 4 * Copyright (c) 2019 joshua stein <jcs@jcs.org> 5 * 6 * Permission to use, copy, modify, and distribute this software for any 7 * purpose with or without fee is hereby granted, provided that the above 8 * copyright notice and this permission notice appear in all copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17 */ 18 19#ifndef _INCL_MAILSTATION 20#define _INCL_MAILSTATION 21 22#include "meta_keys.h" 23 24/* define some ports - see 0x1b2b */ 25__sfr __at(0x01) portkeyboard; 26__sfr __at(0x02) port2; 27__sfr __at(0x05) slot4000page; 28__sfr __at(0x06) slot4000device; 29__sfr __at(0x07) slot8000page; 30__sfr __at(0x08) slot8000device; 31__sfr __at(0x09) portpowerstatus; 32__sfr __at(0x0d) portcpuclockrate; 33__sfr __at(0x10) rtcseconds; 34__sfr __at(0x11) rtc10seconds; 35__sfr __at(0x12) rtcminutes; 36__sfr __at(0x13) rtc10minutes; 37__sfr __at(0x14) rtchours; 38__sfr __at(0x15) rtc10hours; 39__sfr __at(0x16) rtcdayofweek; 40__sfr __at(0x17) rtcdays; 41__sfr __at(0x18) rtc10days; 42__sfr __at(0x19) rtcmonths; 43__sfr __at(0x1a) rtc10months; 44__sfr __at(0x1b) rtcyears; 45__sfr __at(0x1c) rtc10years; 46__sfr __at(0x28) port28; 47 48/* be sure to keep these in sync with mailstation.inc */ 49#define SOURCE_WIFI 0 50#define SOURCE_MODEM 1 51#define SOURCE_LPT 2 52#define SOURCE_ECHO 3 53#define SOURCE_LAST 4 54 55/* LCD parameters (2 screens) */ 56#define LCD_WIDTH (160 * 2) // 320 57#define LCD_HEIGHT 128 58#define LCD_COL_GROUPS 20 59#define LCD_COL_GROUP_WIDTH 8 60 61#define FONT_WIDTH 5 62#define FONT_HEIGHT 8 63 64/* columns of characters */ 65#define LCD_COLS (LCD_WIDTH / FONT_WIDTH) // 64 66#define LCD_ROWS (LCD_HEIGHT / FONT_HEIGHT) // 16 67#define TEXT_COLS LCD_COLS // 64 68#define TEXT_ROWS (LCD_ROWS - 1) // 15 69 70#define ATTR_CURSOR (1 << 0) 71#define ATTR_REVERSE (1 << 1) 72#define ATTR_BOLD (1 << 2) 73#define ATTR_UNDERLINE (1 << 3) 74 75/* for printf */ 76#define BYTE_TO_BINARY_PATTERN "%c%c%c%c%c%c%c%c" 77#define BYTE_TO_BINARY(byte) \ 78 (byte & 0x80 ? '1' : '0'), \ 79 (byte & 0x40 ? '1' : '0'), \ 80 (byte & 0x20 ? '1' : '0'), \ 81 (byte & 0x10 ? '1' : '0'), \ 82 (byte & 0x08 ? '1' : '0'), \ 83 (byte & 0x04 ? '1' : '0'), \ 84 (byte & 0x02 ? '1' : '0'), \ 85 (byte & 0x01 ? '1' : '0') 86 87#define ESC 0x1b // \e 88#define XON 0x11 // ^Q 89#define XOFF 0x13 // ^S 90 91 92/* for debugging access from asm */ 93extern unsigned char debug0; 94extern unsigned char debug1; 95extern unsigned char debug2; 96extern unsigned char debug3; 97extern unsigned char debug4; 98 99 100/* crt0.s */ 101extern unsigned char msTERM_version; 102extern void exit(void); 103extern void powerdown(void); 104extern void new_mail(unsigned char on); 105extern void reboot(void); 106extern void delay(unsigned int millis); 107extern void blink(unsigned int millis); 108extern void panic(void); 109extern void lcd_paint(void); 110extern unsigned char read_port(unsigned char port); 111 112 113/* mslib.c */ 114extern void uitoa(unsigned int value, char *string, int radix); 115extern void itoa(int value, char *string, int radix); 116 117 118/* csi.c */ 119extern unsigned char saved_cursorx; 120extern unsigned char saved_cursory; 121extern void parseCSI(void); 122extern unsigned char in_csi; 123extern unsigned char csibuf[TEXT_COLS]; 124extern unsigned int csibuflen; 125 126 127/* putchar.s */ 128extern unsigned char cursorx; 129extern unsigned char cursory; 130extern unsigned char putchar_sgr; 131extern unsigned char putchar_quick; 132extern unsigned char *font_addr; 133extern void lcd_cas(unsigned char col); 134extern void lcd_sleep(void); 135extern void lcd_wake(void); 136extern void uncursor(void); 137extern void recursor(void); 138extern void clear_screen(void); 139extern void clear_screen_bufs(void); 140extern void redraw_screen(void); 141extern void scroll_lcd_half(void); 142extern void clear_lcd_half(void); 143extern void stamp_char(unsigned char row, unsigned char col); 144extern void putchar_attr(unsigned char row, unsigned char col, unsigned char c, 145 unsigned char attr); 146 147 148/* getchar.s */ 149extern unsigned char getscancode(unsigned char *charbuffer); 150extern int getkey(void); 151extern int peekkey(void); 152 153 154/* isr.s */ 155extern void patch_isr(void); 156 157 158/* lpt.s */ 159extern unsigned char lptsend(unsigned char b); 160extern int lptrecv(void); 161 162 163/* mailstation.c */ 164extern unsigned char *firmware_version; 165extern void setup(void); 166 167 168/* modem.s */ 169extern volatile unsigned char modem_buf[]; 170extern volatile unsigned char modem_buf_pos; 171extern volatile unsigned char modem_buf_read_pos; 172extern volatile unsigned char modem_curmsr; 173extern void modem_init(void); 174extern void modem_powerdown(void); 175extern int modem_ier(void); 176extern int modem_iir(void); 177extern int modem_lcr(void); 178extern int modem_lsr(void); 179extern int modem_msr(void); 180extern char modem_read(void); 181extern void modem_write(char c); 182extern void modem_hangup(void); 183 184 185/* msterm.c */ 186extern volatile unsigned char mem0; 187extern volatile unsigned char obuf[]; 188extern volatile unsigned char obuf_pos; 189extern void update_statusbar(char which, char *status, ...); 190 191 192/* settings.s */ 193extern volatile unsigned int setting_modem_speed; 194extern volatile unsigned char setting_default_source; 195extern void settings_read(void); 196extern void settings_write(void); 197 198 199/* wifi.s */ 200void wifi_init(void); 201extern int wifi_write(char); 202extern int wifi_read(void); 203 204#endif