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
19ASZ80?= sdasz80 -l -ff
20SDCC?= sdcc -mz80 --opt-code-size
21
22SRCDIR?= ${.CURDIR}
23
24OBJ?= obj/
25
26LOC?= ram
27
28.if ${LOC} == "flash"
29BASE_ADDR= 0x4000
30.elif ${LOC} == "ram"
31BASE_ADDR= 0x8000
32.else
33.BEGIN:
34 @echo 'LOC must be "flash" or "ram"'
35 @exit 1
36.endif
37
38.BEGIN:
39 @echo "compiling for running from ${LOC} (${BASE_ADDR})"
40
41all: msterm.bin
42
43clean:
44 rm -f *.{map,bin,ihx,lst,rel,sym,lk,noi} ${SRCDIR}/logo.h
45
46# assembly
47
48ADDRS_INC= ${SRCDIR}/addrs-${LOC}.inc
49
50crt0.rel: crt0.s
51 $(ASZ80) -o ${.TARGET} ${ADDRS_INC} $>
52
53getchar.rel: getchar.s
54 $(ASZ80) -o ${.TARGET} ${ADDRS_INC} $>
55
56isr.rel: isr.s
57 $(ASZ80) -o ${.TARGET} ${ADDRS_INC} $>
58
59lpt.rel: lpt.s
60 $(ASZ80) -o ${.TARGET} ${ADDRS_INC} $>
61
62modem.rel: modem.s
63 $(ASZ80) -o ${.TARGET} ${ADDRS_INC} $>
64
65putchar.rel: putchar.s $(SRCDIR)/font/spleen-5x8.inc
66 $(ASZ80) -o ${.TARGET} ${ADDRS_INC} $(SRCDIR)/putchar.s
67
68settings.rel: settings.s
69 $(ASZ80) -o ${.TARGET} ${ADDRS_INC} $>
70
71wifi.rel: wifi.s
72 $(ASZ80) -o ${.TARGET} ${ADDRS_INC} $>
73
74$(SRCDIR)/logo.h: logo.ans
75 (echo "const char logo[] = {"; xxd -i < $> ; echo "};") > ${.TARGET}
76
77# c code
78
79csi.rel: csi.c
80 $(SDCC) -c ${.TARGET} $>
81
82mslib.rel: mslib.c
83 $(SDCC) -c ${.TARGET} $>
84
85main.rel: main.c $(SRCDIR)/logo.h
86 $(SDCC) -c ${.TARGET} $(SRCDIR)/main.c
87
88# generated code
89
90font/spleen-5x8.inc: font/spleen-5x8.hex
91 ruby $(SRCDIR)/tools/hexfont2inc.rb $> > $(SRCDIR)/${.TARGET}
92
93# link
94
95msterm.ihx: crt0.rel isr.rel putchar.rel getchar.rel lpt.rel modem.rel \
96main.rel mslib.rel csi.rel settings.rel wifi.rel
97 @SDCC="$(SDCC) --no-std-crt0" TARGET="$(.TARGET)" \
98 BASE_ADDR="$(BASE_ADDR)" CODE_OFF="$(CODE_OFF)" \
99 ruby $(SRCDIR)/tools/relink_packed.rb $>
100
101# convert to binary
102
103msterm.bin: msterm.ihx
104 objcopy -Iihex -Obinary $> $@
105 @if [ `stat -f '%z' ${.TARGET}` -gt 16384 ]; then \
106 ls -l ${.TARGET}; \
107 echo "${.TARGET} overflows a ${LOC} page, must be <= 16384; increase DATA_SIZE"; \
108 exit 1; \
109 fi
110
111# helpers
112
113disasm: msterm.bin
114 z80dasm -al -g ${BASE_ADDR} $> > msterm.dasm
115
116upload: all
117 ../../WiFiStation/host/sendload /dev/cuaU0 msterm.bin