# HG changeset patch # User Mychaela Falconia # Date 1584581465 0 # Node ID cdf2c99e5025f5fd579269ced58b5d1ffa25ff49 # Parent 6d02f30e35addec6d6922ffd01cb97ac8137c86f lunalcd project started diff -r 6d02f30e35ad -r cdf2c99e5025 .hgignore --- a/.hgignore Sat Jun 29 22:45:18 2019 +0000 +++ b/.hgignore Thu Mar 19 01:31:05 2020 +0000 @@ -16,3 +16,5 @@ ^lcdtest/lcdphone$ ^lcdtest/lcdtest$ + +^lunalcd/gen-st-init$ diff -r 6d02f30e35ad -r cdf2c99e5025 lunalcd/Makefile --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lunalcd/Makefile Thu Mar 19 01:31:05 2020 +0000 @@ -0,0 +1,13 @@ +CC= gcc +CFLAGS= -O2 +PROGS= gen-st-init + +STINIT_OBJS= common.o initmain.o startek.o + +all: ${PROGS} + +gen-st-init: ${STINIT_OBJS} + ${CC} -o $@ ${STINIT_OBJS} + +clean: + rm -f ${PROGS} *.o diff -r 6d02f30e35ad -r cdf2c99e5025 lunalcd/common.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lunalcd/common.c Thu Mar 19 01:31:05 2020 +0000 @@ -0,0 +1,98 @@ +#include +#include +#include +#include + +static enum { + MODE_L8, + MODE_U8, + MODE_16, + MODE_USB +} mode; + +set_output_mode(kw) + char *kw; +{ + if (!strcmp(kw, "l8")) + mode = MODE_L8; + else if (!strcmp(kw, "u8")) + mode = MODE_U8; + else if (!strcmp(kw, "16")) + mode = MODE_16; + else if (!strcmp(kw, "usb")) + mode = MODE_USB; + else { + fprintf(stderr, "error: mode \"%s\" not understood\n", kw); + exit(1); + } +} + +write_ir(val16) + unsigned val16; +{ + if (mode != MODE_USB) + printf("w16 fffe4802 200\n"); + switch (mode) { + case MODE_L8: + printf("w16 02000000 %02x\n", val16 >> 8); + printf("w16 02000000 %02x\n", val16 & 0xFF); + break; + case MODE_U8: + printf("w16 02000000 %02x00\n", val16 >> 8); + printf("w16 02000000 %02x00\n", val16 & 0xFF); + break; + case MODE_16: + printf("w16 02000000 %04x\n", val16); + break; + case MODE_USB: + printf("wi %04x\n", val16); + } +} + +write_dr(val16) + unsigned val16; +{ + if (mode != MODE_USB) + printf("w16 fffe4802 600\n"); + switch (mode) { + case MODE_L8: + printf("w16 02000002 %02x\n", val16 >> 8); + printf("w16 02000002 %02x\n", val16 & 0xFF); + break; + case MODE_U8: + printf("w16 02000002 %02x00\n", val16 >> 8); + printf("w16 02000002 %02x00\n", val16 & 0xFF); + break; + case MODE_16: + printf("w16 02000002 %04x\n", val16); + break; + case MODE_USB: + printf("wd %04x\n", val16); + } +} + +bulk_wd_prep() +{ + if (mode != MODE_USB) + printf("w16 fffe4802 600\n"); +} + +bulk_wd(val16) + unsigned val16; +{ + switch (mode) { + case MODE_L8: + printf("w16 02000002 %02x\n", val16 >> 8); + printf("w16 02000002 %02x\n", val16 & 0xFF); + break; + case MODE_U8: + printf("w16 02000002 %02x00\n", val16 >> 8); + printf("w16 02000002 %02x00\n", val16 & 0xFF); + break; + case MODE_16: + printf("w16 02000002 %04x\n", val16); + break; + case MODE_USB: + printf("wd %04x\n", val16); + } +} diff -r 6d02f30e35ad -r cdf2c99e5025 lunalcd/init-regs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lunalcd/init-regs Thu Mar 19 01:31:05 2020 +0000 @@ -0,0 +1,9 @@ +# This file is a command script for fc-loadtool to be run on the Caramel board; +# it initializes a few Calypso registers for controlling an LCD connected to +# the expansion interface. + +w16 fffffb06 02A5 +w16 fffef00a 01E0 +w16 fffe4802 0200 +w16 fffe4804 F9FF +w16 fffffd04 FFF3 diff -r 6d02f30e35ad -r cdf2c99e5025 lunalcd/initmain.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lunalcd/initmain.c Thu Mar 19 01:31:05 2020 +0000 @@ -0,0 +1,14 @@ +#include +#include + +main(argc, argv) + char **argv; +{ + if (argc != 2) { + fprintf(stderr, "usage: %s output-mode\n", argv[0]); + exit(1); + } + set_output_mode(argv[1]); + lcd_init_seq(); + exit(0); +} diff -r 6d02f30e35ad -r cdf2c99e5025 lunalcd/startek.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lunalcd/startek.c Thu Mar 19 01:31:05 2020 +0000 @@ -0,0 +1,49 @@ +/* + * ST7775R register init for Startek LCDs KD020C-1 V2 and KD020C-2A, + * the former of which is also sold by Crystalfontz as CFAF176220U-020T. + */ + +lcd_init_seq() +{ + /* basic settings */ + write_ir(0x01); + write_dr(0x011C); + write_ir(0x02); + write_dr(0x0100); + write_ir(0x03); + write_dr(0x1030); + write_ir(0x0F); + write_dr(0x0001); + write_ir(0x10); + write_dr(0x0000); + write_ir(0x11); + write_dr(0x1000); + /* gamma control registers */ + write_ir(0x50); + write_dr(0x0203); + write_ir(0x51); + write_dr(0x0A09); + write_ir(0x52); + write_dr(0x0005); + write_ir(0x53); + write_dr(0x1021); + write_ir(0x54); + write_dr(0x0602); + write_ir(0x55); + write_dr(0x0003); + write_ir(0x56); + write_dr(0x0703); + write_ir(0x57); + write_dr(0x0507); + write_ir(0x58); + write_dr(0x1021); + write_ir(0x59); + write_dr(0x0703); + /* VCOM */ + write_ir(0xB0); + write_dr(0x2501); + /* turn it on! */ + write_ir(0x07); + write_dr(0x1017); + return(0); +}