Terminal program for MailStation devices
at master 117 lines 2.8 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 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