Terminal program for MailStation devices
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