From 8b60e2336e441a60bb7bcf3b8290337d4d48288a Mon Sep 17 00:00:00 2001 From: equant Date: Mon, 27 Dec 2021 12:41:59 -0700 Subject: [PATCH] reorganizing the examples dir structure --- .../apple2-cc65/obj/apple2/apple2idiot.o | Bin 6326 -> 0 bytes examples/chess/apple2-cc65/obj/apple2/foo.o | Bin 2656 -> 0 bytes .../chess/apple2-cc65/obj/apple2/inputline.o | Bin 17048 -> 0 bytes examples/chess/apple2-cc65/obj/apple2/main.o | Bin 20060 -> 0 bytes examples/chess/apple2-cc65/obj/apple2/menu.o | Bin 2542 -> 0 bytes .../chess/apple2-cc65/obj/apple2/screen.o | Bin 5363 -> 0 bytes .../ESP_filesystem_data/a2i.css | 0 .../ESP_filesystem_data/foo.htm | 0 .../ESP_filesystem_data/index.htm | 0 .../ESP_filesystem_data/ram.htm | 0 .../cc65-Chess/.vscode/c_cpp_properties.json | 21 ++ .../cc65-Chess/.vscode/settings.json | 5 + .../cc65-Chess/.vscode/tasks.json | 59 +++ .../cc65-Chess/apple2-cc65/Makefile | 345 ++++++++++++++++++ .../cc65-Chess/apple2-cc65/Makefile-dsk.mk | 22 ++ .../cc65-Chess/apple2-cc65/Makefile.options | 1 + .../apple2-cc65/apple2/template.dsk | Bin 0 -> 143360 bytes .../cc65-Chess/apple2-cc65/cc65-Chess.apple2 | Bin 0 -> 8242 bytes .../cc65-Chess/apple2-cc65/chess.apple2 | Bin 0 -> 8900 bytes .../apple2-cc65/obj/apple2/apple2idiot.d | 0 .../apple2-cc65/obj/apple2/globals.d | 4 + .../cc65-Chess/apple2-cc65/obj/apple2/hires.d | 4 + .../cc65-Chess/apple2-cc65/obj/apple2/human.d | 4 + .../cc65-Chess/apple2-cc65/obj/apple2/main.d | 4 + .../apple2-cc65/obj/apple2/platA2.d | 4 + .../apple2-cc65/src/apple2/charset.bin | Bin 0 -> 768 bytes .../apple2-cc65/src/apple2/genPieces.cpp | 302 +++++++++++++++ .../cc65-Chess/apple2-cc65/src/apple2/hires.s | 192 ++++++++++ .../apple2-cc65/src/apple2/pieces.bin | Bin 0 -> 792 bytes .../apple2-cc65/src/apple2/platA2.c | 337 +++++++++++++++++ .../cc65-Chess}/apple2-cc65/src/apple2idiot.c | 0 .../cc65-Chess}/apple2-cc65/src/apple2idiot.h | 0 .../cc65-Chess/apple2-cc65/src/chess | Bin 0 -> 8330 bytes .../cc65-Chess/apple2-cc65/src/globals.c | 17 + .../cc65-Chess/apple2-cc65/src/globals.h | 18 + .../cc65-Chess/apple2-cc65/src/human.c | 161 ++++++++ .../cc65-Chess/apple2-cc65/src/human.h | 14 + .../cc65-Chess/apple2-cc65/src/main.c | 97 +++++ .../cc65-Chess/apple2-cc65/src/plat.h | 24 ++ .../cc65-Chess/apple2-cc65/src/types.h | 99 +++++ .../chess/README.md | 0 .../chess/a2i_chess.cpp | 0 .../chess/a2i_chess.h | 0 .../chess/apple2-cc65/LICENSE | 0 .../chess/apple2-cc65/Makefile | 0 .../chess/apple2-cc65/Makefile-dsk.mk | 0 .../chess/apple2-cc65/README.md | 0 .../chess/apple2-cc65/apple2/template.dsk | Bin .../apple2-cc65/apple2/template.dsk.plain | Bin .../apple2/template.dsk.with_utils | Bin .../chess/apple2-cc65/chess.apple2 | Bin .../chess/apple2-cc65/mame.bash | 0 .../chess/apple2-cc65/notes.txt | 0 .../apple2-cc65/obj/apple2/apple2idiot.d | 4 + .../chess/apple2-cc65/obj/apple2/foo.d | 0 .../chess/apple2-cc65/obj/apple2/inputline.d | 0 .../chess/apple2-cc65/obj/apple2/main.d | 0 .../chess/apple2-cc65/obj/apple2/menu.d | 0 .../chess/apple2-cc65/obj/apple2/screen.d | 0 .../chess/apple2-cc65/src/apple2idiot.c | 1 + .../chess/apple2-cc65/src/apple2idiot.h | 1 + .../chess/apple2-cc65/src/globals.h | 0 .../chess/apple2-cc65/src/main.c | 0 .../chess/apple2-cc65/src/menu.c | 0 .../chess/apple2-cc65/src/menu.h | 0 .../chess/chess.ino | 0 .../chess/chess_commands.h | 0 .../chess/globals.h | 0 .../ntp_prodos_clock_driver/asm/BELL#068000 | 0 .../ntp_prodos_clock_driver/asm/BELL.S | 0 .../ntp_prodos_clock_driver/asm/PDCLOCKTEST.S | 0 .../ntp_prodos_clock_driver/asm/make.sh | 0 .../asm/ntp_clock_dev-prodos.po | Bin .../slack/ArduinoSlack.cpp | 0 .../slack/ArduinoSlack.h | 0 .../slack/ArduinoSlackCert.h | 0 .../slack/README.md | 0 .../slack/bad_data/bad.json | 0 .../slack/bad_data/bad_json.raw | 0 .../slack/bad_data/foo.foo | 0 .../slack/bad_data/good.json | 0 .../slack/bad_data/good_json.raw | 0 .../user.conversations.test.pretty.all.json | 0 .../user.conversations.test.pretty.one.json | 0 .../slack/example_credentials.h | 0 .../slack/myTest.ino.old | 0 .../slack/slack.ino | 0 examples/{ => old_basic_examples}/RRAM.BAS | 0 .../{ => old_basic_examples}/STRREAD.SUB.BAS | 0 .../{ => old_basic_examples}/STRWRITE.SUB.BAS | 0 examples/{ => old_basic_examples}/WRAM.BAS | 0 .../{ => old_basic_examples}/rot13/CMDROT.BAS | 0 .../{ => old_basic_examples}/rot13/ROT13.BAS | 0 .../{ => old_basic_examples}/rot13/rot13.ino | 0 examples/old_basic_examples/weather.ino | 179 +++++++++ .../weather/WEATHER.BAS | 0 .../wifi_scan/CSCANWIFI.BAS | 0 .../wifi_scan/SCANWIFI.BAS | 0 .../wifi_scan/SHOWIP.BAS | 0 .../wifi_scan/wifi_scan.ino | 0 examples/slack/tags | 83 ----- 101 files changed, 1919 insertions(+), 83 deletions(-) delete mode 100644 examples/chess/apple2-cc65/obj/apple2/apple2idiot.o delete mode 100644 examples/chess/apple2-cc65/obj/apple2/foo.o delete mode 100644 examples/chess/apple2-cc65/obj/apple2/inputline.o delete mode 100644 examples/chess/apple2-cc65/obj/apple2/main.o delete mode 100644 examples/chess/apple2-cc65/obj/apple2/menu.o delete mode 100644 examples/chess/apple2-cc65/obj/apple2/screen.o rename examples/{ => defunct-explorations}/ESP_filesystem_data/a2i.css (100%) rename examples/{ => defunct-explorations}/ESP_filesystem_data/foo.htm (100%) rename examples/{ => defunct-explorations}/ESP_filesystem_data/index.htm (100%) rename examples/{ => defunct-explorations}/ESP_filesystem_data/ram.htm (100%) create mode 100644 examples/defunct-explorations/cc65-Chess/.vscode/c_cpp_properties.json create mode 100644 examples/defunct-explorations/cc65-Chess/.vscode/settings.json create mode 100644 examples/defunct-explorations/cc65-Chess/.vscode/tasks.json create mode 100644 examples/defunct-explorations/cc65-Chess/apple2-cc65/Makefile create mode 100644 examples/defunct-explorations/cc65-Chess/apple2-cc65/Makefile-dsk.mk create mode 100644 examples/defunct-explorations/cc65-Chess/apple2-cc65/Makefile.options create mode 100644 examples/defunct-explorations/cc65-Chess/apple2-cc65/apple2/template.dsk create mode 100644 examples/defunct-explorations/cc65-Chess/apple2-cc65/cc65-Chess.apple2 create mode 100644 examples/defunct-explorations/cc65-Chess/apple2-cc65/chess.apple2 rename examples/{chess => defunct-explorations/cc65-Chess}/apple2-cc65/obj/apple2/apple2idiot.d (100%) create mode 100644 examples/defunct-explorations/cc65-Chess/apple2-cc65/obj/apple2/globals.d create mode 100644 examples/defunct-explorations/cc65-Chess/apple2-cc65/obj/apple2/hires.d create mode 100644 examples/defunct-explorations/cc65-Chess/apple2-cc65/obj/apple2/human.d create mode 100644 examples/defunct-explorations/cc65-Chess/apple2-cc65/obj/apple2/main.d create mode 100644 examples/defunct-explorations/cc65-Chess/apple2-cc65/obj/apple2/platA2.d create mode 100644 examples/defunct-explorations/cc65-Chess/apple2-cc65/src/apple2/charset.bin create mode 100644 examples/defunct-explorations/cc65-Chess/apple2-cc65/src/apple2/genPieces.cpp create mode 100644 examples/defunct-explorations/cc65-Chess/apple2-cc65/src/apple2/hires.s create mode 100644 examples/defunct-explorations/cc65-Chess/apple2-cc65/src/apple2/pieces.bin create mode 100644 examples/defunct-explorations/cc65-Chess/apple2-cc65/src/apple2/platA2.c rename examples/{chess => defunct-explorations/cc65-Chess}/apple2-cc65/src/apple2idiot.c (100%) rename examples/{chess => defunct-explorations/cc65-Chess}/apple2-cc65/src/apple2idiot.h (100%) create mode 100644 examples/defunct-explorations/cc65-Chess/apple2-cc65/src/chess create mode 100644 examples/defunct-explorations/cc65-Chess/apple2-cc65/src/globals.c create mode 100644 examples/defunct-explorations/cc65-Chess/apple2-cc65/src/globals.h create mode 100644 examples/defunct-explorations/cc65-Chess/apple2-cc65/src/human.c create mode 100644 examples/defunct-explorations/cc65-Chess/apple2-cc65/src/human.h create mode 100644 examples/defunct-explorations/cc65-Chess/apple2-cc65/src/main.c create mode 100644 examples/defunct-explorations/cc65-Chess/apple2-cc65/src/plat.h create mode 100644 examples/defunct-explorations/cc65-Chess/apple2-cc65/src/types.h rename examples/{ => defunct-explorations}/chess/README.md (100%) rename examples/{ => defunct-explorations}/chess/a2i_chess.cpp (100%) rename examples/{ => defunct-explorations}/chess/a2i_chess.h (100%) rename examples/{ => defunct-explorations}/chess/apple2-cc65/LICENSE (100%) rename examples/{ => defunct-explorations}/chess/apple2-cc65/Makefile (100%) rename examples/{ => defunct-explorations}/chess/apple2-cc65/Makefile-dsk.mk (100%) rename examples/{ => defunct-explorations}/chess/apple2-cc65/README.md (100%) rename examples/{ => defunct-explorations}/chess/apple2-cc65/apple2/template.dsk (100%) rename examples/{ => defunct-explorations}/chess/apple2-cc65/apple2/template.dsk.plain (100%) rename examples/{ => defunct-explorations}/chess/apple2-cc65/apple2/template.dsk.with_utils (100%) rename examples/{ => defunct-explorations}/chess/apple2-cc65/chess.apple2 (100%) rename examples/{ => defunct-explorations}/chess/apple2-cc65/mame.bash (100%) rename examples/{ => defunct-explorations}/chess/apple2-cc65/notes.txt (100%) create mode 100644 examples/defunct-explorations/chess/apple2-cc65/obj/apple2/apple2idiot.d rename examples/{ => defunct-explorations}/chess/apple2-cc65/obj/apple2/foo.d (100%) rename examples/{ => defunct-explorations}/chess/apple2-cc65/obj/apple2/inputline.d (100%) rename examples/{ => defunct-explorations}/chess/apple2-cc65/obj/apple2/main.d (100%) rename examples/{ => defunct-explorations}/chess/apple2-cc65/obj/apple2/menu.d (100%) rename examples/{ => defunct-explorations}/chess/apple2-cc65/obj/apple2/screen.d (100%) create mode 120000 examples/defunct-explorations/chess/apple2-cc65/src/apple2idiot.c create mode 120000 examples/defunct-explorations/chess/apple2-cc65/src/apple2idiot.h rename examples/{ => defunct-explorations}/chess/apple2-cc65/src/globals.h (100%) rename examples/{ => defunct-explorations}/chess/apple2-cc65/src/main.c (100%) rename examples/{ => defunct-explorations}/chess/apple2-cc65/src/menu.c (100%) rename examples/{ => defunct-explorations}/chess/apple2-cc65/src/menu.h (100%) rename examples/{ => defunct-explorations}/chess/chess.ino (100%) rename examples/{ => defunct-explorations}/chess/chess_commands.h (100%) rename examples/{ => defunct-explorations}/chess/globals.h (100%) rename examples/{ => defunct-explorations}/ntp_prodos_clock_driver/asm/BELL#068000 (100%) rename examples/{ => defunct-explorations}/ntp_prodos_clock_driver/asm/BELL.S (100%) rename examples/{ => defunct-explorations}/ntp_prodos_clock_driver/asm/PDCLOCKTEST.S (100%) rename examples/{ => defunct-explorations}/ntp_prodos_clock_driver/asm/make.sh (100%) rename examples/{ => defunct-explorations}/ntp_prodos_clock_driver/asm/ntp_clock_dev-prodos.po (100%) rename examples/{ => defunct-explorations}/slack/ArduinoSlack.cpp (100%) rename examples/{ => defunct-explorations}/slack/ArduinoSlack.h (100%) rename examples/{ => defunct-explorations}/slack/ArduinoSlackCert.h (100%) rename examples/{ => defunct-explorations}/slack/README.md (100%) rename examples/{ => defunct-explorations}/slack/bad_data/bad.json (100%) rename examples/{ => defunct-explorations}/slack/bad_data/bad_json.raw (100%) rename examples/{ => defunct-explorations}/slack/bad_data/foo.foo (100%) rename examples/{ => defunct-explorations}/slack/bad_data/good.json (100%) rename examples/{ => defunct-explorations}/slack/bad_data/good_json.raw (100%) rename examples/{ => defunct-explorations}/slack/bad_data/user.conversations.test.pretty.all.json (100%) rename examples/{ => defunct-explorations}/slack/bad_data/user.conversations.test.pretty.one.json (100%) rename examples/{ => defunct-explorations}/slack/example_credentials.h (100%) rename examples/{ => defunct-explorations}/slack/myTest.ino.old (100%) rename examples/{ => defunct-explorations}/slack/slack.ino (100%) rename examples/{ => old_basic_examples}/RRAM.BAS (100%) rename examples/{ => old_basic_examples}/STRREAD.SUB.BAS (100%) rename examples/{ => old_basic_examples}/STRWRITE.SUB.BAS (100%) rename examples/{ => old_basic_examples}/WRAM.BAS (100%) rename examples/{ => old_basic_examples}/rot13/CMDROT.BAS (100%) rename examples/{ => old_basic_examples}/rot13/ROT13.BAS (100%) rename examples/{ => old_basic_examples}/rot13/rot13.ino (100%) create mode 100644 examples/old_basic_examples/weather.ino rename examples/{ => old_basic_examples}/weather/WEATHER.BAS (100%) rename examples/{ => old_basic_examples}/wifi_scan/CSCANWIFI.BAS (100%) rename examples/{ => old_basic_examples}/wifi_scan/SCANWIFI.BAS (100%) rename examples/{ => old_basic_examples}/wifi_scan/SHOWIP.BAS (100%) rename examples/{ => old_basic_examples}/wifi_scan/wifi_scan.ino (100%) delete mode 100644 examples/slack/tags diff --git a/examples/chess/apple2-cc65/obj/apple2/apple2idiot.o b/examples/chess/apple2-cc65/obj/apple2/apple2idiot.o deleted file mode 100644 index 2106c3f55bb5b8121e3e54f7e38c44579d5b3e1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6326 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 P$h|B-<*Gr^sB`}Xcl|)t diff --git a/examples/chess/apple2-cc65/obj/apple2/foo.o b/examples/chess/apple2-cc65/obj/apple2/foo.o deleted file mode 100644 index 93dfd48b277d48d95c4021f66ec59bceb182a482..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2656 zcmb`H+f!3l6vo%u34t6??gbGc2r6PjNVuqlq7kA{14M3KDuzP{7YRvvPJ%$M9PG{3 z*50h0_MziLr`qX5XWE(m1+|_2FP*;iwd>nznQ_{ej?C=e{=T*LT6>?v&Y9Xwo8?3_ zE2CJ(ii}bjn=*n0MBmAtSLvywR~^QMSjiiqwo(G`P8CORu|%<)IwrCcZP z|9I<$$K_V4t!~i#y}G>L_h9DND$ie1euN${tLsec<6gt@axbZ`nWMx%u;1&Hu^*Wj zGBKSwj7$qMEy&CpPASh5-{U^-5O4EVtL#nOM|_tp@9<8B+NM3)y zO&n#`fuAJ6th=2;HxIgb(5KsQ+}y1*)!5f1>(v(iH|&zrF!y6so#B*l9V***^6kh( z@H7#9?hEjZc=|@&uM_K&*eNM5Gsttu&lrx2XLNoDzQJ&IbAzr=z^AcOTIY*U-?p<~ z8}bW=qj*8*OW}L4e~+%uz*oXo>b!ya5cUrt<24*+FL5oOC0^z#@6fi3xQh5&E+oFe zDMX9C!-y6W-{*70clatwM-68ekLspJ(X)hufCJ9Xohi{teGkj8#nTD(@lg2X>Sn_6dw2 z76C?qsef7WsA37VPZ1~3?=kwI`hguq5A8lA1bu*3eyIPAWz;@JOrzgp^g;ClJBoO^ zjEMZCSSk68@or!?Be8a>W+lI)0bV2?0>Z%PKZrm@ff2q!JPb?#0{}fl8I;B#)PF<1 zq7;w|#{|_ON>RCL2n!Wnf)*sWTGO{#&ow7 zjj0+wq;fUt8Sdb5Rm}sgx^%s&;>$d$D)|UEs0x0;wbnS#1w5ksEv}zg)!}DDu3%NM zm_7IiHOY~_VK#ZcL~6IGiOc19L>qeqw1iJgC9n!qmC5JmGSpSz9eE_8SAaLQ+}6CI zS&VR5krc$BUI*#{c>zQ-Q1VL`zO9*p)PEo%R0G#_Ne*%jSOMP9!4Dob#sh{C{Su%q zuop-IX`ltT0yN2>WuOdpAMg?|4}1mCI`}-W3wTR!(+z0=H?=6z~_3+E}Xg){u;0sNXVdZsIyROP@BMWKpuDvr~{gTL%{pG;Vk64T3&*D z8Q9YPQ_XYYsSnXx+TYRq7y-HnUH~d_zk+1Ml>bUBAd@8 ziu7c!ZxqI@` zBI%s9oU{wt?d8p6LA0YI6ahQC3$l4RjYo6cBS*2bA!Is^YlgvKsBkWmN##>H?YcEP zJ@!({T<=7UDM!^)(6gGC;8FL$*kHsnJ~kMh47*NEOt>M6E=9)2V&O9p_vlnKO7u4z CQfbxz diff --git a/examples/chess/apple2-cc65/obj/apple2/inputline.o b/examples/chess/apple2-cc65/obj/apple2/inputline.o deleted file mode 100644 index 042d2846e4dd58b6612b40ef29948d3b6b2e409a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17048 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 diff --git a/examples/chess/apple2-cc65/obj/apple2/main.o b/examples/chess/apple2-cc65/obj/apple2/main.o deleted file mode 100644 index 7e70ddb9eb5e20236f2d1682f9019753de6d0bcd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20060 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 diff --git a/examples/chess/apple2-cc65/obj/apple2/menu.o b/examples/chess/apple2-cc65/obj/apple2/menu.o deleted file mode 100644 index 2023bf1f4a6060fdfbe4276c44ccf508c3015b61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2542 zcmb`I%U2U;7{=dsav!{KQB)KOAPTh*k|2mE5)2pHfZPIdv0*YM5FsJVB&d|u8hWwz z-qY@TJl(kLrl+S{7w!MheOK+O|3JUzor>pl+0&dezj>bboBZYjCLy_7FlvZsRUK98 z*igq&b?mBR$V2qAI&Q06>m@p?&fV&)sdH4FlPWy%6WwK^KLSMRL=iQ|`Okm4OLGnV z{^MUyy)L(=Wq(^SzCT_w82shVugAOz7f~C%VAh^6aggJB#m#ZjzGJ>X`~!~%DghqH zN-I`cWhID}C9EuArAM#$xrg{U7Xst^N>dNdX!GPV{;~5cy}Fabz*a&_rcaD zdpm{R4qH2HgO063Y=f{(J2q!BjjJ1BYZTk-=*zGz%ieCI&%rha+mK^RifstCGmg!f zoWa$Luq}%19=Z=UpX}`%`U-3-upM!1!(uxETgb6FlMt@nfNeu;HRu7@0Pm8QA5?|#vi3fpKsT1`-!@zt0M-Y53aTRG0c$IWie3$SRCy7nK z05*XjFm^D@BV`U2_6`yu<@g$L7LXJ~8UqX<4`cvY*gHt%EM$mF{1Q2&0Ur<}0|HLJ1%s!6_t#X&ysTnB`R@g#|u|bW(kR(gh;c2&w%bsSgjc%wCh3uC;QD zzrVMxadE?2ueETCE1zxB&T$JzvBV9SY4KL=IA0Bz9evBbfS#Dtj;VWAX?1+wKhZhR zKDXjeYqdPAZTGN;N3`)J?I+ew@IF0mR=0n~+{VpnQom2l9AR~9vQMc$3atb9k3e~( z72qE5MD3Dj5BNahzVN9qiE$M$1v~=IsDthxsjpJSkA$0u^16=ng$!FT=s@2B@WiM` zUcDY7*+3Rp0Q!Mi;9Gz$gYN(d)FVi}KoM92YJm6URwcwVumQX$!_S3t7=+b9F{A;Y z9yNnh0M4Plh13k>fNG!-*aq-llO6!qfWyFt;=hE5$Dclv-iFu*d?G!CcmnuJ`ZD4W zpq>^Y1IYsBfuq2E;51+YGr$h83tR!pz`H|DL{cf;w#-mIQz&=Y4W`k1DL5bL z3SSO(29xP>p;Qi{b%sxyrdryO_U|>#F1l?iv*uHWZR})lP8)>{cPU>C0}&t!^tg*9 zD-1+{DA3auD%)1bUN@{v2)79tc0N}yLz`QLwX|gv%=NCkVfs>QTcxcB4}B>svy-vx zK*}^XGlqpp(aIG{*+Z$Uy7*ygeKS|c97^4_jQbPn=NdLFPold!+VAPIbGsSj@QAPn zj9ix0h)nur5*J3n?om&%thVMAKJco2+3M%HaVtLJow*f{&Ba{9v$Jjl|I*0Jt*O}9 Lh}-+9k-p67ku?+!(^ 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 cxExn*VWC@zXMEn+(FHj- $(STATEFILE)) + endif + $(eval $(OBJECTS): $(STATEFILE)) + endif +else + ifeq ($(origin _OPTIONS_),file) + $(info Using saved OPTIONS=$(_OPTIONS_)) + OPTIONS = $(_OPTIONS_) + $(eval $(OBJECTS): $(STATEFILE)) + endif +endif + +# Transform the abstract OPTIONS to the actual cc65 options. +$(foreach o,$(subst $(COMMA),$(SPACE),$(OPTIONS)),$(eval $(_$o_))) + +# Strip potential variant suffix from the actual cc65 target. +CC65TARGET := $(firstword $(subst .,$(SPACE),$(TARGETLIST))) + +# The remaining targets. +$(TARGETOBJDIR): + $(call MKDIR,$@) + +vpath %.c $(SRCDIR)/$(TARGETLIST) $(SRCDIR) + +$(TARGETOBJDIR)/%.o: %.c | $(TARGETOBJDIR) + cl65 -t $(CC65TARGET) -c --create-dep $(@:.o=.d) $(CFLAGS) -o $@ $< + +vpath %.s $(SRCDIR)/$(TARGETLIST) $(SRCDIR) + +$(TARGETOBJDIR)/%.o: %.s | $(TARGETOBJDIR) + cl65 -t $(CC65TARGET) -c --create-dep $(@:.o=.d) $(ASFLAGS) -o $@ $< + +vpath %.asm $(SRCDIR)/$(TARGETLIST) $(SRCDIR) + +$(TARGETOBJDIR)/%.o: %.asm | $(TARGETOBJDIR) + cl65 -t $(CC65TARGET) -c --create-dep $(@:.o=.d) $(ASFLAGS) -o $@ $< + +vpath %.a65 $(SRCDIR)/$(TARGETLIST) $(SRCDIR) + +$(TARGETOBJDIR)/%.o: %.a65 | $(TARGETOBJDIR) + cl65 -t $(CC65TARGET) -c --create-dep $(@:.o=.d) $(ASFLAGS) -o $@ $< + +$(PROGRAM): $(CONFIG) $(OBJECTS) $(LIBS) + cl65 -t $(CC65TARGET) $(LDFLAGS) -o $@ $(patsubst %.cfg,-C %.cfg,$^) + +test: $(PROGRAM) + $(PREEMUCMD) + $(EMUCMD) $< + $(POSTEMUCMD) + +clean: + $(call RMFILES,$(OBJECTS)) + $(call RMFILES,$(DEPENDS)) + $(call RMFILES,$(REMOVES)) + $(call RMFILES,$(PROGRAM)) + +else # $(words $(TARGETLIST)),1 + +all test clean: + $(foreach t,$(TARGETLIST),$(MAKE) TARGETS=$t $@$(NEWLINE)) + +endif # $(words $(TARGETLIST)),1 + +OBJDIRLIST := $(wildcard $(OBJDIR)/*) + +zap: + $(foreach o,$(OBJDIRLIST),-$(call RMFILES,$o/*.o $o/*.d $o/*.lst)$(NEWLINE)) + $(foreach o,$(OBJDIRLIST),-$(call RMDIR,$o)$(NEWLINE)) + -$(call RMDIR,$(OBJDIR)) + -$(call RMFILES,$(basename $(PROGRAM)).* $(STATEFILE)) + +love: + @echo "Not war, eh?" + +################################################################### +### Place your additional targets in the additional Makefiles ### +### in the same directory - their names have to end with ".mk"! ### +################################################################### +-include *.mk diff --git a/examples/defunct-explorations/cc65-Chess/apple2-cc65/Makefile-dsk.mk b/examples/defunct-explorations/cc65-Chess/apple2-cc65/Makefile-dsk.mk new file mode 100644 index 0000000..f201535 --- /dev/null +++ b/examples/defunct-explorations/cc65-Chess/apple2-cc65/Makefile-dsk.mk @@ -0,0 +1,22 @@ +DSK = cc65-Chess.dsk + +# For this one, see https://applecommander.github.io/ +#AC ?= ac.jar +AC ?= ~/bin/AppleCommander.jar + +# Unix or Windows +ifeq ($(shell echo),) + CP = cp $1 +else + CP = copy $(subst /,\,$1) +endif + +REMOVES += $(DSK) + +.PHONY: dsk +dsk: $(DSK) + +$(DSK): cc65-Chess.apple2 + $(call CP, apple2/template.dsk $@) + java -jar $(AC) -p $@ chess.system sys < $(shell cl65 --print-target-path)/apple2/util/loader.system + java -jar $(AC) -as $@ chess bin < cc65-Chess.apple2 diff --git a/examples/defunct-explorations/cc65-Chess/apple2-cc65/Makefile.options b/examples/defunct-explorations/cc65-Chess/apple2-cc65/Makefile.options new file mode 100644 index 0000000..a74ac17 --- /dev/null +++ b/examples/defunct-explorations/cc65-Chess/apple2-cc65/Makefile.options @@ -0,0 +1 @@ +_OPTIONS_=optspeed diff --git a/examples/defunct-explorations/cc65-Chess/apple2-cc65/apple2/template.dsk b/examples/defunct-explorations/cc65-Chess/apple2-cc65/apple2/template.dsk new file mode 100644 index 0000000000000000000000000000000000000000..e2354c61e6cc4bc705e73b0e73dba78452b243e0 GIT binary patch literal 143360 zcmeEvd3+Psz3)gP+mdW!*%%N6$b{7bk~krY!fJNeh$TSSvMFt7WCDb?v?b{hC$*^R zcpSM+8ku z-YP~qbN2K5{m$=vf4_6iL}eCe>%$+dnG~h9C8m`H_~;rO`JPy@B_~p6kwyvKIGUxj zZDW1;7Vc?_&5`G@cz#%CseDHlX*eTY@g@iR=|Y2al^1lO;X3#0`bI++r*q_UYdlo+ zy6~XGQfw%FK>8dnoIj51- zz5?U&foavQ^tS1~=>UEOT9=-8)ml6Bw6aLj%k?%(sx#hv1)bt)U@<&8HUWP z?%6$h_A>VFb5GxX{qJS&8!≪33q%KL7nGpo;w;KmYv+@IQEjn*YIL|JTqdil&nO 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 H%l-cY`F!-V literal 0 HcmV?d00001 diff --git a/examples/defunct-explorations/cc65-Chess/apple2-cc65/chess.apple2 b/examples/defunct-explorations/cc65-Chess/apple2-cc65/chess.apple2 new file mode 100644 index 0000000000000000000000000000000000000000..d3d999c49d59031e3b5d801fa8c66188c9c8d009 GIT binary patch literal 8900 zcmc&)3vg7|c|Lph?rOD?&`K531+7+xHLrUDwyY2=+p-Xj;}OYigWXU+;>RXLw&d^- zU=O52ybEZR)uNSG9V|o|rt2-saJPt{CQSy<5HxX2v`mw^H0?BxwqYi*40eLAaZKRkmhYQWQ@N)-a;UwA${Iuf7$6jJyH16!o zSNTnXhdBSo#%$2^@&4ed{gb>Rm{rc!iKExt7Xoi*7oB}ie?E30@D8AjH*^Ac@OP_X zlM(7Il|6njWLEQ6LMB5m+?L5UEE+#x)VkGQHZqpZ`s8{82Fyo0^E(9@A_5lMjIWZyUAVMMeCR4Pqi; zc}x{+rYFNjVy26a)n>4f{U?O}n3%$xJ5gM~>Q@(LTzqXa=ywpmau>vB9XFgVBDNMaV=NcuC%L@b|3>PkLomt`6FTi-Mh(*yRcFU0JXMY<+C zF%p9ipZw$}p#pUDGRQk+R)ZlnWhDF(4Fc*e%S}YVl66=9hH`=im5lph%vuZ%P1lZ? zB%Xqla}*)-4;~d(Bav#m;*tVnU1H*RhMCCg`)r8I%T4`n^xAPQxccesJ3uF4uv za!RgWEkQ{{x&A|0V>kW_>Fn`A>=;jwCit3WVgx||=P1r+8J0&9MmsUcM}v;vOvL!Q zW{MjM8B^iE2xi#}WUte%3tC3m0fNaX)PqE};J2_W&3XMYIap#0PM)8LB`(HJuYoUV z8Ffdji_r5uq!iCAFW}?^xO})G<05)mFWkehDsD&_{3L9RG5d^@hK7$AvPy~ z^!1DaCfYOJ*)7Sq*b`<#RKEaP?s>9-cw!_0mhEz|26l|kR2mzJvLp)y(Z|193u}&5II(Br!?CPgE5R}@EkTAWe&k8svGzC@TTUTSWEFiPII+m3gU!+tjc(N z0l#yBao>V*w~k12^J>{^wBF#C>!Ga(KTn#19iSs~B~_ECvZfj1J9R$Vz|RC7JDHWV z=%VVIsK%@Ga)1#KAQlsa>mj`JA(S}?jc6#Su**!5fV2D^TDg9?q`xiLD5FXf9t~-| z@~|Mwnh+UIVs3!!D%oy5f4!cVl46-($AL#KLg!vR-yGu6W^#-VVciO>VyZLLYNJ`E zfippVn-41gPJ`(>LAoWsoQP$-7h`F+aeLqeIzlgNlmSY407oSpKEc1!Xnk1*tnQ+% zSJKw2D3v%d?W7RQz}Jvf$ZAtKFw`-=sM%bf1sI3?6GHTt)WN)m6Ji* z949;35RRso%^LIioI=T)3{CfiI3*O_^$DDQ@QLEIeG5dub!3A%W4u~}CYJF)%2{;- zBgStF@k*Xiks=#w9dN{pQC~~JDZ%-Vf*IdzKqwgxlvh6I>00js!gj7z^$<2w>1dYR zcq)l;*#uqT%4RKR_QOlH-YHx%mgdLkOacaZ@7?6RPc`y--PlCRpzv@`&!Rq{8Al&5 zGJL494niZByNzI7L4~Ef#=q8LMnP9a7bht+ig@1#2Ho3Zg8^6e5z>|QUwGgv;S|XSKN^L4X8?1DLD~W#2u^~{V-oQ zz@$vlTaRP1Eu+4Pi@_Dv^LvRkHyQUfk&fN`E;S5fE}t>yqCoSABX*@se=vP|8|d=# zg>bns#s6!LZzioddMO@R*B>Adm2wYnYoLqZ?8zp<%Ag_Bhl&Ewz`-|n{UP;R<^18M zJX{_(%U?8-VsQ++jgQykTIe>OtS?lc`D}fm3Qe@Wu+Vs4sll-c-0B-E;MYO=x~lU-+E;OyTqPmkVETV7J(vg{=o=Us#2!C?(LGrrY8mO)DMBW{YROy(~c_oVj|*QGD%eQj4bF55B#Q{GwvmqnI> znO_YV{d9eyl-MOtmLBP#K9GlTC=f_1v&pb{Q;qiz!~yNxR^jaZbT0s##b*NEv44k4 zH6GRD-*_Jx&SNg*>?ORjS8beJb^qk52PVzBcsR1^zDbjz&7Zx0G6E{2)1#I$eK<1y zMUi?!@a>xUL{@-BJ{2-v(sPG!Fvbs^R?a^k8SfKT4X@ISZ#PocOWlb^)b!Znzia?6 zhrstCQ0-6j4^E7>U1>?LD)>*Y%-DUR$C5p!2oXj^yEd(wC{lp8yK1P%XT!__Uqdgtm^VZ9XrzvEvKrxL{R_@FqI zqz?G*Pw-?D|D2Xf7%w)>8@%7tmGPW8#EwKnBJg%k{LsMje0fuRbl@;GV*^L%sKsk& zY-(aG^*x>Hm-XCeJdryrUs9uXMPZp;Hf8;G`mpupnASZSA5BAjZLcKa$=u;r2IB`k zNqZSNizjykch}q)RfAN)PZGIZ=4SVc`g{SSB z!c(>n;jb39;4L(h>XRG(a?#LEk=-@?6_FLgFvRy83Y)D3aEsI~yf9Kv3&Yn~_yUl6 zt<`wugIy)d$HBgm{mAeR!QXE0^PYJuBYas1Od-i({RBaPg+d;!@;SXp%8DEh`pH-D*!+qj1)MM_kRupzw zmBiauh*#R=8LNWh_U7lN+;a~YebCao#zEXKX_*g#Ab|t`(o@)Dl@~p3Q#0_vPI0)d zIW;JTlVaRqWZ|i8;#Y%We7iXD>!djC9Uc@zNzpdGMf`eDI;xS&Ud z4vItqk%5QD@qGwg9L%Mc2Z9(8&i}3X?u^)iwl0caYL+dDXr)~=X-+F zOLI$KUXm{3y?83cmqwpB%X757hYs&-{V6G~lN~S~s@j>wV~gk1V51 zM-QU>GrTtL9S7s>)QHu~&>F z6M=V()=)CgWUkJzk>qp|q8^ln+uTIKX#95*2$-xZ!%aphefj?72gJ+iwE9YVI+3t` zb>hsW70CA>jJULZl3_g~N!vYTy^|X{o{CuX5Q&kaYgD^&XxgzbA=2X|l1FOmykN3ptplwsiizKpArS9PKSd!(FkM6>LUzGJnoT5a z-<0+4^uf#4Z^k6ww1WABy)b{)y;4_fZ?f&mCFDQr_31(D)m-xULHJ_Zh8dX_$USx- z^o{2mrL~bs-qDlsgJ|E?i$;g};VJ2fA+0+(GBhXqOnoFK9pYQs_%;31TRPauu=`|+x-XW` zrNN8Y5Kox+T-@Bc_KuEHd((=K-15=e?p#-DOL(QW zgjZ@yc%`<4S87XmrM84uYD;*fwuDz|OZxUv!QXc3>gwcFU0nzM)iGbYKe#gFW8UQf zpW52ORKH&pwX2xVr%E`Vswj#I%mC*+fK~*3LE*#ShkP9%=)gFz9nOeqEC5)=pO}K- zRpoFl$5>kjS z*($6Z%dO#dhDD%-S&-NV|ImWuGhFNU`fI}sU??3dyjBQ;3&Rkt1djpnO`8Egj!CaH zCOqsPBzd7kDzuM;M^#tnjD=WB^y-Lp*%F-83-Rft0*Og_4(VH{kOlyb+9@5-5$T3X zkhen~h=(mgG!84!3&$)}E5{ueYfIGyq<6+J-_F7N;^hE0Co>lGF3S8F0J*+4~U_T_S*1Ld^Z{V!3Z~RDS6wG-;f!yL-V$KEuf&5xA+noAqOQKE zyYDV{-#Yi6b>6*E@3YY|eC>M{XnQN!vrR18*cn|HiLP_d=O{oD=nuA8&pLfB?o)VF zfij(shD_;XE*2#K`Z~a^0$Ct0P>Y2uzyQ;^+ZEaEjxcxM?lR}2Vbt9jbrCLz;OhXl zZm9Hn3Srh3UT{xc&E4T8;q_sK@vtxa`QT0WL~GP2S;w&g)a!h(6zG&VkWzH8wvGjR zgU!!&tm}w&z%GyNzALo3y`6>jGO`Xnja9-Nv)>#Ahycgh&DdrZsdEQ5slK&7wJxwU zTw7a5P6KA{VKwS{;-o8DeghspNTF|2*`D3idp9>fvZ-m?<~z6TzVor@UG34(-VWkq zJ{xm9%n37Rl%m>UAjeGTY?k&y2MT8{p#NS9(kQcPCkmKxCQF_96k2X={pgyHt-Y=7 z_Vssv{GLzTySnw(HMgy4`{>#=ZOqC1GSDg50~Q^cviE^1GhYVuD`!h_0e`heL9~CU zH~{6cxNcBry>oW6|EK*KbGgf^o7b_FovJ@vSbmqTis zth;5sMbB$nx9P>XhjeXgx1Q?O&vxHmHxXRo=B*5Nl9Z=Yo6CJn1$eEYeA%LL-Z4|oIo AssI20 literal 0 HcmV?d00001 diff --git a/examples/chess/apple2-cc65/obj/apple2/apple2idiot.d b/examples/defunct-explorations/cc65-Chess/apple2-cc65/obj/apple2/apple2idiot.d similarity index 100% rename from examples/chess/apple2-cc65/obj/apple2/apple2idiot.d rename to examples/defunct-explorations/cc65-Chess/apple2-cc65/obj/apple2/apple2idiot.d diff --git a/examples/defunct-explorations/cc65-Chess/apple2-cc65/obj/apple2/globals.d b/examples/defunct-explorations/cc65-Chess/apple2-cc65/obj/apple2/globals.d new file mode 100644 index 0000000..e512b9a --- /dev/null +++ b/examples/defunct-explorations/cc65-Chess/apple2-cc65/obj/apple2/globals.d @@ -0,0 +1,4 @@ +obj/apple2/globals.o: src/globals.c src/types.h src/globals.h + +src/globals.c src/types.h src/globals.h: + diff --git a/examples/defunct-explorations/cc65-Chess/apple2-cc65/obj/apple2/hires.d b/examples/defunct-explorations/cc65-Chess/apple2-cc65/obj/apple2/hires.d new file mode 100644 index 0000000..c2fb386 --- /dev/null +++ b/examples/defunct-explorations/cc65-Chess/apple2-cc65/obj/apple2/hires.d @@ -0,0 +1,4 @@ +obj/apple2/hires.o: src/apple2/hires.s /usr/share/cc65/asminc/apple2.inc /usr/share/cc65/asminc/zeropage.inc src/apple2/charset.bin src/apple2/pieces.bin + +src/apple2/hires.s /usr/share/cc65/asminc/apple2.inc /usr/share/cc65/asminc/zeropage.inc src/apple2/charset.bin src/apple2/pieces.bin: + diff --git a/examples/defunct-explorations/cc65-Chess/apple2-cc65/obj/apple2/human.d b/examples/defunct-explorations/cc65-Chess/apple2-cc65/obj/apple2/human.d new file mode 100644 index 0000000..f3a6d5a --- /dev/null +++ b/examples/defunct-explorations/cc65-Chess/apple2-cc65/obj/apple2/human.d @@ -0,0 +1,4 @@ +obj/apple2/human.o: src/human.c src/types.h src/globals.h src/human.h src/plat.h + +src/human.c src/types.h src/globals.h src/human.h src/plat.h: + diff --git a/examples/defunct-explorations/cc65-Chess/apple2-cc65/obj/apple2/main.d b/examples/defunct-explorations/cc65-Chess/apple2-cc65/obj/apple2/main.d new file mode 100644 index 0000000..3cfe4b0 --- /dev/null +++ b/examples/defunct-explorations/cc65-Chess/apple2-cc65/obj/apple2/main.d @@ -0,0 +1,4 @@ +obj/apple2/main.o: src/main.c src/types.h src/globals.h src/human.h src/plat.h src/apple2idiot.h src/../../../chess/chess_commands.h src/../../../../arduino-lib/Apple2Idiot/A2I_commands.h + +src/main.c src/types.h src/globals.h src/human.h src/plat.h src/apple2idiot.h src/../../../chess/chess_commands.h src/../../../../arduino-lib/Apple2Idiot/A2I_commands.h: + diff --git a/examples/defunct-explorations/cc65-Chess/apple2-cc65/obj/apple2/platA2.d b/examples/defunct-explorations/cc65-Chess/apple2-cc65/obj/apple2/platA2.d new file mode 100644 index 0000000..8d36fa9 --- /dev/null +++ b/examples/defunct-explorations/cc65-Chess/apple2-cc65/obj/apple2/platA2.d @@ -0,0 +1,4 @@ +obj/apple2/platA2.o: src/apple2/platA2.c src/apple2/../types.h src/apple2/../globals.h src/apple2/../plat.h + +src/apple2/platA2.c src/apple2/../types.h src/apple2/../globals.h src/apple2/../plat.h: + diff --git a/examples/defunct-explorations/cc65-Chess/apple2-cc65/src/apple2/charset.bin b/examples/defunct-explorations/cc65-Chess/apple2-cc65/src/apple2/charset.bin new file mode 100644 index 0000000000000000000000000000000000000000..0ae6e59b78e14825ea6f4f8139a3ec0feb11ff74 GIT binary patch literal 768 zcmXYv-HPNO5QPgV8VSuHL59$TAku_I=3>ajuq?s%f2{qEPPJHl%47W;V>T_yELzTa z1aj{Dvc-GZ{~XaCXNrD(n=gyE^~+-P!HXV3aBikjO2W52?kyUGPQuBV+&+9=?=h5BaS1tLwq>qt%mZcZ!s*1-% zoSf|Z*G>3o%)8h2?-g!~xz=8*kz9*&<{~cuJE$LypuUC=c5{5y+c@M}wO#GgKPrqq z>$*IawHh?6Tm5NGyjst8i4RcUDh6R-=_;&y)ZaBPBFa=}@Y!;nxV0bU%W8di@rEwy z^C4qmO<$P)TP6jdvrp@2ByD7SxtWLYC~*kafG&k7(hl6g+uJ{+yBYDj(EICzz>Deu zc`r-Y`b4~S`K%+VxY=jJ@XD_aq=4d6f!}<^>~%^HFajLrez?CkF!bwdcmx=}HGQi? ifO&ow5_X=q+vdExZ_KCffbJ6So}T7y&ih{DSpNYvayKIY literal 0 HcmV?d00001 diff --git a/examples/defunct-explorations/cc65-Chess/apple2-cc65/src/apple2/genPieces.cpp b/examples/defunct-explorations/cc65-Chess/apple2-cc65/src/apple2/genPieces.cpp new file mode 100644 index 0000000..3d3be8d --- /dev/null +++ b/examples/defunct-explorations/cc65-Chess/apple2-cc65/src/apple2/genPieces.cpp @@ -0,0 +1,302 @@ +/* + * genPieces.cpp + * cc65 Chess + * + * Created by Oliver Schmidt, January 2020. + * Pieces designed by Frank Gebhart, 1980s. + * + */ + +#include +#ifdef _WIN32 +#include +#else +#include +#endif + +char pieces[]= +" " +" **** ***** **** " +" * * * * * * " +" * * * * * * " +" * ***** ***** * " +" * * " +" * * " +" * * " +" * ********* * " +" ** ** " +" * * " +" * * " +" * * " +" * * " +" * * " +" * * " +" * * " +" * *********** * " +" * * " +" ******************* " +" ******************* " +" " +" " +" **** ***** **** " +" **** ***** **** " +" **** ***** **** " +" ******************* " +" ******************* " +" ***************** " +" *************** " +" ************* " +" * * " +" *********** " +" *********** " +" *********** " +" *********** " +" *********** " +" ************* " +" *************** " +" *************** " +" * * " +" ******************* " +" ******************* " +" " +" " +" * * " +" * * * * " +" * * * " +" * * " +" * * " +" * * * * " +" * * * " +" * ** * " +" * * * " +" * * " +" * **** * " +" * * * * ** " +" ** * ** * " +" * * * " +" * * * " +" * ** " +" * * " +" * ************ * " +" * * " +" **************** " +" " +" " +" * * " +" * * * * " +" ***** *** " +" ********** " +" ************ " +" **** **** ** " +" ********* ** " +" ********** ** " +" ************ ** " +" **************** " +" **************** " +" **** **** *** " +" ** ***** ** " +" ******* *** " +" ********* ** " +" ************** " +" *************** " +" * * " +" **************** " +" **************** " +" " +" " +" " +" *** " +" * * " +" * * " +" * * * " +" * * * " +" * ******* * " +" * * * " +" * * * " +" * * * " +" * * * " +" * * " +" * * " +" ******* " +" * * " +" * * " +" ***** " +" * * " +" *************** " +" ***************** " +" " +" " +" " +" *** " +" ***** " +" ******* " +" **** **** " +" ***** ***** " +" ** ** " +" ****** ****** " +" ****** ****** " +" ****** ****** " +" ***** ***** " +" *********** " +" ********* " +" * * " +" ******* " +" ******* " +" ***** " +" *********** " +" * * " +" ***************** " +" " +" " +" " +" *** " +" * * " +" *** * * *** " +" * * * * * * " +" * * * * * * " +" * * * * * * " +" * * " +" * * * * * " +" * ** *** ** * " +" * ********* * " +" * ******* * " +" * * " +" * * " +" * *********** * " +" * * " +" * * " +" * * " +" ** ** " +" *********** " +" " +" " +" " +" *** " +" ***** " +" *** ***** *** " +" ***** *** ***** " +" ****** ***** ****** " +" ***** ******* ***** " +" ******************* " +" **** **** **** **** " +" **** ** ** **** " +" **** **** " +" ***** ***** " +" *************** " +" *************** " +" ** ** " +" ************* " +" ************* " +" ************* " +" ************* " +" *********** " +" " +" " +" *** " +" * * " +" *** *** " +" ** ** " +" ** * * ** " +" * * * * * * " +" * ** ** * " +" * * * * " +" * * * * * * " +" * * * * * * " +" * * * * * " +" * * * * * " +" * * * * " +" * * * * " +" * * " +" * ********* * " +" * * " +" * * " +" ** ** " +" *********** " +" " +" " +" *** " +" * * " +" *** *** " +" ** ** " +" ** * * ** " +" **** * * **** " +" ******* ******* " +" ******* ******* " +" *** ** * * ** *** " +" *** **** **** *** " +" *** ***** ***** *** " +" **** ********* **** " +" **** ******* **** " +" ***** ***** ***** " +" *************** " +" ** ** " +" ************* " +" ************* " +" ************* " +" *********** " +" " +" " +" " +" " +" " +" " +" *** " +" * * " +" * * " +" * * " +" * * " +" * * " +" *** " +" * * " +" * * " +" ** ** " +" * * " +" * * " +" ******* " +" * * " +" *********** " +" *********** " +" " +" " +" " +" " +" " +" " +" *** " +" ***** " +" ******* " +" ******* " +" ******* " +" ***** " +" *** " +" ***** " +" ***** " +" ******* " +" ***** " +" ***** " +" ******* " +" * * " +" *********** " +" *********** " +" " +; + +int main(void) +{ + int i; + int f = open("pieces.bin",O_CREAT|O_TRUNC|O_WRONLY); + char c = 0; + + for(i=0; i> 1 | I & $C0 >> 3 + .endrep + +BASEHI: + .repeat $C0, I + .byte >$2000 | I & $07 << 2 | I & $30 >> 4 + .endrep + +_hires_CharSet: +.incbin "charset.bin" + +_hires_Pieces: +.incbin "pieces.bin" + +.code + + +.proc _hires_Init + + bit $C082 ; Switch in ROM + + lda VERSION ; Needs ROM + cmp #$06 ; Apple //e ? + bne :+ + + lda #$15 ; Turn off 80-column firmware + jsr $C300 ; Needs ROM (see $CEF4) + +: bit $C080 ; Back to LC bank 2 for R/O + + bit TXTCLR + bit MIXCLR + bit HIRES + + lda #20 + sta WNDTOP ; Prepare hires_text() + rts + +.endproc + + +.proc _hires_Done + + bit TXTSET + + lda #00 + sta WNDTOP ; Back to full screen text + rts + +.endproc + + +.proc _hires_Text + + tax ; 'flag' + lda MIXCLR,x + rts + +.endproc + + +.data + + +.proc _hires_Draw + + sta src+1 ; 'src' lo + stx src+2 ; 'src' hi + + jsr popax ; 'rop' + stx rop + sta rop+1 + + jsr popa ; 'ysize' + sta ymax+1 + + jsr popa ; 'xsize' + sta xmax+1 + + jsr popa ; 'ypos' + sta ypos+1 + tax + + clc + adc ymax+1 + sta ymax+1 + + jsr popa ; 'xpos' + sta xpos+1 + + clc + adc xmax+1 + sta xmax+1 +yloop: + lda BASELO,x + sta dst+1 + lda BASEHI,x + sta dst+2 + +xpos: ldx #$FF ; Patched +xloop: +src: lda $FFFF,y ; Patched + iny +rop: nop ; Patched + nop ; Patched +dst: sta $FFFF,x ; Patched + inx +xmax: cpx #$FF ; Patched + bne xloop + + inc ypos+1 +ypos: ldx #$FF ; Patched +ymax: cpx #$FF ; Patched + bne yloop + rts + +.endproc + + +.proc _hires_Mask + + stx rop ; 'rop' hi + sta rop+1 ; 'rop' lo + + jsr popa ; 'ysize' + sta ymax+1 + + jsr popa ; 'xsize' + sta xmax+1 + + jsr popa ; 'ypos' + tax + + clc + adc ymax+1 + sta ymax+1 + + jsr popa ; 'xpos' + sta xpos+1 + + clc + adc xmax+1 + sta xmax+1 + +yloop: + lda BASELO,x + sta src+1 + sta dst+1 + lda BASEHI,x + sta src+2 + sta dst+2 + +xpos: ldy #$FF ; Patched +xloop: +src: lda $FFFF,y ; Patched +rop: nop ; Patched + nop ; Patched +dst: sta $FFFF,y ; Patched + iny +xmax: cpy #$FF ; Patched + bne xloop + + inx +ymax: cpx #$FF ; Patched + bne yloop + rts + +.endproc diff --git a/examples/defunct-explorations/cc65-Chess/apple2-cc65/src/apple2/pieces.bin b/examples/defunct-explorations/cc65-Chess/apple2-cc65/src/apple2/pieces.bin new file mode 100644 index 0000000000000000000000000000000000000000..df0063d4ee3861ad6425db97a5de2ee8d8eb4942 GIT binary patch literal 792 zcmZ{h&1>605XGN%*VdM#jx2OA)Umf)L7|uCR05G#vhg9uTzo4*RF|HD=tVvV&%fST zZ4D@m({H@R);$wHyH|y_* z+n46yrF(d$O+l;Pc_-&KMh{~%V<>;d&H;s(c+m`b@q!1Ah@bygVF=}I>|TLS!r|-U GT;Vq`+jZ#x literal 0 HcmV?d00001 diff --git a/examples/defunct-explorations/cc65-Chess/apple2-cc65/src/apple2/platA2.c b/examples/defunct-explorations/cc65-Chess/apple2-cc65/src/apple2/platA2.c new file mode 100644 index 0000000..226d327 --- /dev/null +++ b/examples/defunct-explorations/cc65-Chess/apple2-cc65/src/apple2/platA2.c @@ -0,0 +1,337 @@ +/* + * platA2.c + * cc65 Chess + * + * Created by Oliver Schmidt, January 2020. + * + */ + +#include +#include +#include +#include "../types.h" +#include "../globals.h" +#include "../plat.h" + + +/*-----------------------------------------------------------------------*/ +#define BOARD_PIECE_WIDTH 3 +#define BOARD_PIECE_HEIGHT 22 +#define CHAR_HEIGHT 8 +#define LOG_WINDOW_HEIGHT 23 +#define SCREEN_WIDTH 40 +#define SCREEN_HEIGHT 192 + +#define ROP_CONST(val) 0xA980|(val) +#define ROP_BLACK 0xA980 +#define ROP_WHITE 0xA9FF +#define ROP_XOR(val) 0x4900|(val) +#define ROP_CPY 0x4980 +#define ROP_INV 0x49FF +#define ROP_AND(val) 0x2900|(val) + +char rop_Line[2][7] = {{0x00, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F}, + {0x00, 0x40, 0x60, 0x70, 0x78, 0x7C, 0x7E}}; + +char rop_Color[2][2] = {{0x55, 0x2A}, {0xD5, 0xAA}}; + +extern char hires_CharSet[96][CHAR_HEIGHT]; +extern char hires_Pieces[6][2][BOARD_PIECE_WIDTH*BOARD_PIECE_HEIGHT]; + +void hires_Init(void); +void hires_Done(void); +void hires_Text(char flag); +void hires_Draw(char xpos, char ypos, + char xsize, char ysize, + unsigned rop, char *src); +void hires_Mask(char xpos, char ypos, + char xsize, char ysize, + unsigned rop); + +/*-----------------------------------------------------------------------*/ +void plat_Drawchar(char x, char y, unsigned rop, char c) +{ + hires_Draw(x,y,1,CHAR_HEIGHT,rop,hires_CharSet[c-' ']); +} + +/*-----------------------------------------------------------------------*/ +void plat_Drawstring(char x, char y, unsigned rop, char *s) +{ + while(*s) + plat_Drawchar(x++,y,rop,*s++); +} + +/*-----------------------------------------------------------------------*/ +void plat_Init() +{ + char i; + + // Clear the hires screen + hires_Mask(0,0,SCREEN_WIDTH,SCREEN_HEIGHT,ROP_BLACK); + + // Show the hires screen + hires_Init(); + + // Draw the board border + hires_Mask( 1, 12,1,8*BOARD_PIECE_HEIGHT+2*2,ROP_CONST(rop_Line[1][2])); + hires_Mask(26, 12,1,8*BOARD_PIECE_HEIGHT+2*2,ROP_CONST(rop_Line[0][2])); + hires_Mask( 2, 12,8*BOARD_PIECE_WIDTH,2, ROP_WHITE); + hires_Mask( 2,190,8*BOARD_PIECE_WIDTH,2, ROP_WHITE); + + // Add the A..H and 1..8 tile-keys + for(i=0; i<8; ++i) + { + plat_Drawchar(3+i*BOARD_PIECE_WIDTH,0, ROP_CPY,i+'A'); + plat_Drawchar(0,SCREEN_HEIGHT-17-i*BOARD_PIECE_HEIGHT,ROP_CPY,i+'1'); + } +} + +/*-----------------------------------------------------------------------*/ +char plat_Menu(char **menuItems, char height, char *scroller) +{ + int keyMask; + char i, j; + + clrscr(); + hires_Text(1); + + // Show the title or the scroller if that is more relevant. + // cputs(scroller == gszAbout ? menuItems[0] : scroller); + + // Select the first item + i = 1; + do + { + // Show all the menu items + for(j=1; j 2) + i -= 2; + else + i = j-1-(i-1)%2; + break; + + case INPUT_DOWN: + if(i < j-2) + i += 2; + else + i = 1+(i-1)%2; + break; + } + } + keyMask &= (INPUT_SELECT | INPUT_BACKUP); + + } while(keyMask != INPUT_SELECT && keyMask != INPUT_BACKUP); + + hires_Text(0); + + // If backing out of the menu, return 0 + if(keyMask & INPUT_BACKUP) + return 0; + + // Return the selection + return i; +} + +/*-----------------------------------------------------------------------*/ +// Draw the chess board and possibly clear the log section +void plat_DrawBoard(char clearLog) +{ + char i; + + if(clearLog) + hires_Mask(27,0,SCREEN_WIDTH-27,SCREEN_HEIGHT,ROP_BLACK); + + // Redraw all tiles + for(i=0; i<64; ++i) + plat_DrawSquare(i); +} + +/*-----------------------------------------------------------------------*/ +// Draw a tile with background and piece on it for positions 0..63 +void plat_DrawSquare(char position) +{ + unsigned rop; + char inv; + char y = position / 8, x = position & 7; + char piece = gChessBoard[y][x]; + char blackWhite = !((x & 1) ^ (y & 1)); + + if(piece) + { + rop = blackWhite ? ROP_INV : ROP_CPY; + inv = blackWhite ^ (piece & PIECE_WHITE) != 0; + } + else + rop = blackWhite ? ROP_WHITE : ROP_BLACK; + + hires_Draw(2+x*BOARD_PIECE_WIDTH,14+y*BOARD_PIECE_HEIGHT, + BOARD_PIECE_WIDTH,BOARD_PIECE_HEIGHT,rop, + hires_Pieces[(piece&PIECE_DATA)-1][inv]); +} + +/*-----------------------------------------------------------------------*/ +void plat_ShowSideToGoLabel(char side) +{ + // plat_Drawstring(28,SCREEN_HEIGHT-CHAR_HEIGHT, + // side?ROP_CPY:ROP_INV,gszSideLabel[side]); +} + +/*-----------------------------------------------------------------------*/ +void plat_Highlight(char position, char color, char cursor) +{ + char y = position / 8, x = position & 7; + + if (cursor && color != HCOLOR_SELECTED) + { + char size = color == HCOLOR_EMPTY ? 6 : color == HCOLOR_INVALID ? 4 : 2; + + hires_Mask(2+x*BOARD_PIECE_WIDTH,14+y*BOARD_PIECE_HEIGHT+size, + 1,BOARD_PIECE_HEIGHT-2*size,ROP_XOR(rop_Line[0][size])); + hires_Mask(2+x*BOARD_PIECE_WIDTH+BOARD_PIECE_WIDTH-1,14+y*BOARD_PIECE_HEIGHT+size, + 1,BOARD_PIECE_HEIGHT-2*size,ROP_XOR(rop_Line[1][size])); + hires_Mask(2+x*BOARD_PIECE_WIDTH,14+y*BOARD_PIECE_HEIGHT, + BOARD_PIECE_WIDTH,size,ROP_XOR(0x7F)); + hires_Mask(2+x*BOARD_PIECE_WIDTH,14+y*BOARD_PIECE_HEIGHT+BOARD_PIECE_HEIGHT-size, + BOARD_PIECE_WIDTH,size,ROP_XOR(0x7F)); + } + else + { + char set = color == HCOLOR_ATTACK; + char val = cursor ^ x * BOARD_PIECE_WIDTH & 1; + + hires_Mask(2+x*BOARD_PIECE_WIDTH,14+y*BOARD_PIECE_HEIGHT, + 1,BOARD_PIECE_HEIGHT,ROP_AND(rop_Color[set][!val])); + hires_Mask(2+x*BOARD_PIECE_WIDTH+1,14+y*BOARD_PIECE_HEIGHT, + 1,BOARD_PIECE_HEIGHT,ROP_AND(rop_Color[set][val])); + hires_Mask(2+x*BOARD_PIECE_WIDTH+2,14+y*BOARD_PIECE_HEIGHT, + 1,BOARD_PIECE_HEIGHT,ROP_AND(rop_Color[set][!val])); + } +} + +/*-----------------------------------------------------------------------*/ +void plat_ShowMessage(char *str, char) +{ + plat_Drawstring(26,0,ROP_CPY,str); +} + +/*-----------------------------------------------------------------------*/ +void plat_ClearMessage() +{ + hires_Mask(26,0,7,CHAR_HEIGHT,ROP_BLACK); +} + +/*-----------------------------------------------------------------------*/ +int plat_ReadKeys(char blocking) +{ + char key = 0; + int keyMask = 0; + + if(blocking || kbhit()) + key = cgetc(); + else + return 0; + + switch(key) + { + case CH_CURS_LEFT: + keyMask |= INPUT_LEFT; + break; + + case CH_CURS_RIGHT: + keyMask |= INPUT_RIGHT; + break; + + case 'O': + case 'o': // Reasonably located on the ][ keyboard + case 0x0B: // No CH_CURS_UP in apple2.h, only in apple2enh.h + keyMask |= INPUT_UP; + break; + + case 'L': + case 'l': // Reasonably located on the ][ keyboard + case 0x0A: // No CH_CURS_DOWN in apple2.h, only in apple2enh.h + keyMask |= INPUT_DOWN; + break; + + case CH_ESC: + keyMask |= INPUT_BACKUP; + break; + + case CH_ENTER: + keyMask |= INPUT_SELECT; + break; + + case 'A': + case 'a': // Show Attackers + keyMask |= INPUT_TOGGLE_A; + break; + + case 'B': + case 'b': // Board attacks - Show all attacks + keyMask |= INPUT_TOGGLE_B; + break; + + case 'D': + case 'd': // Show Defenders + keyMask |= INPUT_TOGGLE_D; + break; + + case 'M': + case 'm': + keyMask |= INPUT_MENU; + break; + + case 'R': + case 'r': + keyMask |= INPUT_REDO; + break; + + case 'U': + case 'u': + keyMask |= INPUT_UNDO; + break; + } + + return keyMask; +} + +/*-----------------------------------------------------------------------*/ +// Only ever gets called if gReturnToOS is true +void plat_Shutdown() +{ + hires_Done(); +} diff --git a/examples/chess/apple2-cc65/src/apple2idiot.c b/examples/defunct-explorations/cc65-Chess/apple2-cc65/src/apple2idiot.c similarity index 100% rename from examples/chess/apple2-cc65/src/apple2idiot.c rename to examples/defunct-explorations/cc65-Chess/apple2-cc65/src/apple2idiot.c diff --git a/examples/chess/apple2-cc65/src/apple2idiot.h b/examples/defunct-explorations/cc65-Chess/apple2-cc65/src/apple2idiot.h similarity index 100% rename from examples/chess/apple2-cc65/src/apple2idiot.h rename to examples/defunct-explorations/cc65-Chess/apple2-cc65/src/apple2idiot.h diff --git a/examples/defunct-explorations/cc65-Chess/apple2-cc65/src/chess b/examples/defunct-explorations/cc65-Chess/apple2-cc65/src/chess new file mode 100644 index 0000000000000000000000000000000000000000..b29d7d88989fd8986e90571c55b5349b0492ba31 GIT binary patch literal 8330 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 7) == side) + { + // If the cursor is on a piece of this turn, that has moved and no other piece + // has yet been selected, then select this piece + ++selector; + gTile[1] = gTile[0]; + keyMask = INPUT_MOTION; // Force a cursor re-draw + } + else if(gTile[0] == gTile[1]) + { + // If the selected tile is re-selected, deselect it + --selector; + // Since plat_Highlight doesn't undraw selected, just draw this tile + plat_DrawSquare(gTile[0]); + keyMask = INPUT_MOTION; // force a redraw (which should have made the plat_Drawsquae above unnecessary) + } + else if(selector) + { + // Doesn't consider if this is a valid move, just does it + + //write_string_to_ram(RAM_DATA_START_ADDRESS, player_move); + write_byte(APPLE_COMMAND_ADDRESS, CHESS_MAKE_MOVE); + + gChessBoard[sc_cursorY][sc_cursorX] = gChessBoard[gTile[0]/8][gTile[0]&7]; + gChessBoard[gTile[0]/8][gTile[0]&7] = NONE; + plat_DrawSquare(gTile[0]); + plat_DrawSquare(gTile[1]); + ++selector; + } + } + } while(selector < 2); + + // Save the cursor positions for next time + gCursorPos[side][0] = sc_cursorY; + gCursorPos[side][1] = sc_cursorX; + + return OUTCOME_OK; +} diff --git a/examples/defunct-explorations/cc65-Chess/apple2-cc65/src/human.h b/examples/defunct-explorations/cc65-Chess/apple2-cc65/src/human.h new file mode 100644 index 0000000..4d3cafb --- /dev/null +++ b/examples/defunct-explorations/cc65-Chess/apple2-cc65/src/human.h @@ -0,0 +1,14 @@ +/* + * human.h + * cc65 Chess + * + * Created by Stefan Wessels, February 2014. + * + */ + +#ifndef _HUMAN_H_ +#define _HUMAN_H_ + +char human_Play(char side); + +#endif //_HUMAN_H_ \ No newline at end of file diff --git a/examples/defunct-explorations/cc65-Chess/apple2-cc65/src/main.c b/examples/defunct-explorations/cc65-Chess/apple2-cc65/src/main.c new file mode 100644 index 0000000..791443d --- /dev/null +++ b/examples/defunct-explorations/cc65-Chess/apple2-cc65/src/main.c @@ -0,0 +1,97 @@ +/* + * main.c + * cc65 Chess + * + * Created by Stefan Wessels, February 2014. + * + */ + +#include "types.h" +#include "globals.h" +#include "human.h" +#include "plat.h" + +#include "apple2idiot.h" +#include "../../../chess/chess_commands.h" +#include "../../../../arduino-lib/Apple2Idiot/A2I_commands.h" + +/*-----------------------------------------------------------------------*/ +void board_Init() +{ + char x,y,i; + + for(x=0; x < 8; x++) + { + for(y=0; y < 8; y++) + { + gChessBoard[x][y] = NONE; + } + } + + gChessBoard[0][0] = gChessBoard[7][0] = ROOK; + gChessBoard[0][1] = gChessBoard[7][1] = KNIGHT; + gChessBoard[0][2] = gChessBoard[7][2] = BISHOP; + gChessBoard[0][3] = gChessBoard[7][3] = QUEEN; + gChessBoard[0][4] = gChessBoard[7][4] = KING; + gChessBoard[0][5] = gChessBoard[7][5] = BISHOP; + gChessBoard[0][6] = gChessBoard[7][6] = KNIGHT; + gChessBoard[0][7] = gChessBoard[7][7] = ROOK; + + for(i=0; i < 8; ++i) + { + gChessBoard[1][i] = PAWN; + gChessBoard[6][i] = PAWN | PIECE_WHITE; + gChessBoard[7][i] |= PIECE_WHITE; + } + + // Not part of the board but does need resetting for every game + gCursorPos[SIDE_BLACK][1] = gCursorPos[SIDE_WHITE][1] = 4; + gCursorPos[SIDE_BLACK][0] = 1; + gCursorPos[SIDE_WHITE][0] = 6; +} + +/*-----------------------------------------------------------------------*/ +// Internal function Prototype +void gameLoop(void); +void init(void); + +/*-----------------------------------------------------------------------*/ +int main() +{ + init(); + + while (state != STATE_QUIT) { + switch(state) { + case STATE_AI_GAME: + break; + //case STATE_NONE: + //break; + default: + gameLoop(); + break; + } + } + + plat_Shutdown(); + return 0; +} + +/*-----------------------------------------------------------------------*/ +void init() +{ + board_Init(); + plat_Init(); +} + +/*-----------------------------------------------------------------------*/ +void gameLoop() +{ + char side = SIDE_WHITE, outcome = OUTCOME_OK; + + plat_DrawBoard(1); + while(outcome != OUTCOME_QUIT) + { + outcome = human_Play(side); + side = 1 - side; + } +} diff --git a/examples/defunct-explorations/cc65-Chess/apple2-cc65/src/plat.h b/examples/defunct-explorations/cc65-Chess/apple2-cc65/src/plat.h new file mode 100644 index 0000000..574cd06 --- /dev/null +++ b/examples/defunct-explorations/cc65-Chess/apple2-cc65/src/plat.h @@ -0,0 +1,24 @@ +/* + * plat.h + * cc65 Chess + * + * Created by Stefan Wessels, February 2014. + * + */ + +#ifndef _PLAT_H_ +#define _PLAT_H_ + +void plat_Init(void); +void plat_UpdateScreen(void); +char plat_Menu(char **menuItems, char height, char *scroller); +void plat_DrawBoard(char clearLog); +void plat_DrawSquare(char position); +void plat_ShowSideToGoLabel(char side); +void plat_Highlight(char position, char color, char cursor); +void plat_ShowMessage(char *str, char color); +void plat_ClearMessage(void); +int plat_ReadKeys(char blocking); +void plat_Shutdown(void); + +#endif //_PLAT_H_ diff --git a/examples/defunct-explorations/cc65-Chess/apple2-cc65/src/types.h b/examples/defunct-explorations/cc65-Chess/apple2-cc65/src/types.h new file mode 100644 index 0000000..41c0412 --- /dev/null +++ b/examples/defunct-explorations/cc65-Chess/apple2-cc65/src/types.h @@ -0,0 +1,99 @@ +/* + * types.h + * cc65 Chess + * + * Created by Stefan Wessels, February 2014. + * + */ + +#ifndef _TYPES_H_ +#define _TYPES_H_ + +/**********************************************************/ +// Stuff from my old chess code (NPH) + +#define ASCII_L 76 +#define ASCII_Q 81 +#define ASCII_S 83 +#define ASCII_W 87 +#define BACKSPACE 8 + +#define SIZE_X 40 +#define SIZE_Y 24 + +#define STATE_NONE 0 +#define STATE_LOCAL_GAME 1 +#define STATE_QUIT 27 + +#define CARD_ADDRESS 0xC200 +#define ESP_COMMAND_ADDRESS 0xC200 +#define APPLE_COMMAND_ADDRESS 0xC201 +#define RAM_DATA_START_ADDRESS 0xC202 + +#define ESP_TIMEOUT 5555 + +/**********************************************************/ + +#define SET_BIT(x) (1<<(x)) + +#define SIDE_BLACK 0 +#define SIDE_WHITE 1 +#define NUM_PIECES_SIDE 16 + +#define HCOLOR_WHITE 1 +#define HCOLOR_BLACK 2 +#define HCOLOR_EMPTY 4 +#define HCOLOR_VALID 5 +#define HCOLOR_INVALID 2 +#define HCOLOR_SELECTED 6 +#define HCOLOR_ATTACK 3 + +#define PIECE_WHITE SET_BIT(7) +#define PIECE_DATA (SET_BIT(0) | SET_BIT(1) | SET_BIT(2)) + +#define INPUT_UP SET_BIT(0) +#define INPUT_RIGHT SET_BIT(1) +#define INPUT_DOWN SET_BIT(2) +#define INPUT_LEFT SET_BIT(3) +#define INPUT_BACKUP SET_BIT(4) +#define INPUT_TOGGLE_A SET_BIT(5) +#define INPUT_TOGGLE_B SET_BIT(6) +#define INPUT_TOGGLE_D SET_BIT(7) +#define INPUT_SELECT SET_BIT(8) +#define INPUT_MENU SET_BIT(9) +#define INPUT_UNDO SET_BIT(10) +#define INPUT_REDO SET_BIT(11) +#define INPUT_UNDOREDO (INPUT_UNDO | INPUT_REDO) +#define INPUT_MOTION (INPUT_UP | INPUT_RIGHT | INPUT_DOWN | INPUT_LEFT) +#define INPUT_TOGGLE (INPUT_TOGGLE_A | INPUT_TOGGLE_B | INPUT_TOGGLE_D) + +enum +{ + NONE, + ROOK, + KNIGHT, + BISHOP, + QUEEN, + KING, + PAWN, +}; + +enum +{ + OUTCOME_INVALID, + OUTCOME_OK, + OUTCOME_CHECK, + OUTCOME_CHECKMATE, + OUTCOME_DRAW, + OUTCOME_STALEMATE, + OUTCOME_MENU, + OUTCOME_ABANDON, + OUTCOME_QUIT, +}; + +#define STATE_NONE 0 +#define STATE_LOCAL_GAME 1 +#define STATE_AI_GAME 1 +#define STATE_QUIT 27 + +#endif //_TYPES_H_ diff --git a/examples/chess/README.md b/examples/defunct-explorations/chess/README.md similarity index 100% rename from examples/chess/README.md rename to examples/defunct-explorations/chess/README.md diff --git a/examples/chess/a2i_chess.cpp b/examples/defunct-explorations/chess/a2i_chess.cpp similarity index 100% rename from examples/chess/a2i_chess.cpp rename to examples/defunct-explorations/chess/a2i_chess.cpp diff --git a/examples/chess/a2i_chess.h b/examples/defunct-explorations/chess/a2i_chess.h similarity index 100% rename from examples/chess/a2i_chess.h rename to examples/defunct-explorations/chess/a2i_chess.h diff --git a/examples/chess/apple2-cc65/LICENSE b/examples/defunct-explorations/chess/apple2-cc65/LICENSE similarity index 100% rename from examples/chess/apple2-cc65/LICENSE rename to examples/defunct-explorations/chess/apple2-cc65/LICENSE diff --git a/examples/chess/apple2-cc65/Makefile b/examples/defunct-explorations/chess/apple2-cc65/Makefile similarity index 100% rename from examples/chess/apple2-cc65/Makefile rename to examples/defunct-explorations/chess/apple2-cc65/Makefile diff --git a/examples/chess/apple2-cc65/Makefile-dsk.mk b/examples/defunct-explorations/chess/apple2-cc65/Makefile-dsk.mk similarity index 100% rename from examples/chess/apple2-cc65/Makefile-dsk.mk rename to examples/defunct-explorations/chess/apple2-cc65/Makefile-dsk.mk diff --git a/examples/chess/apple2-cc65/README.md b/examples/defunct-explorations/chess/apple2-cc65/README.md similarity index 100% rename from examples/chess/apple2-cc65/README.md rename to examples/defunct-explorations/chess/apple2-cc65/README.md diff --git a/examples/chess/apple2-cc65/apple2/template.dsk b/examples/defunct-explorations/chess/apple2-cc65/apple2/template.dsk similarity index 100% rename from examples/chess/apple2-cc65/apple2/template.dsk rename to examples/defunct-explorations/chess/apple2-cc65/apple2/template.dsk diff --git a/examples/chess/apple2-cc65/apple2/template.dsk.plain b/examples/defunct-explorations/chess/apple2-cc65/apple2/template.dsk.plain similarity index 100% rename from examples/chess/apple2-cc65/apple2/template.dsk.plain rename to examples/defunct-explorations/chess/apple2-cc65/apple2/template.dsk.plain diff --git a/examples/chess/apple2-cc65/apple2/template.dsk.with_utils b/examples/defunct-explorations/chess/apple2-cc65/apple2/template.dsk.with_utils similarity index 100% rename from examples/chess/apple2-cc65/apple2/template.dsk.with_utils rename to examples/defunct-explorations/chess/apple2-cc65/apple2/template.dsk.with_utils diff --git a/examples/chess/apple2-cc65/chess.apple2 b/examples/defunct-explorations/chess/apple2-cc65/chess.apple2 similarity index 100% rename from examples/chess/apple2-cc65/chess.apple2 rename to examples/defunct-explorations/chess/apple2-cc65/chess.apple2 diff --git a/examples/chess/apple2-cc65/mame.bash b/examples/defunct-explorations/chess/apple2-cc65/mame.bash similarity index 100% rename from examples/chess/apple2-cc65/mame.bash rename to examples/defunct-explorations/chess/apple2-cc65/mame.bash diff --git a/examples/chess/apple2-cc65/notes.txt b/examples/defunct-explorations/chess/apple2-cc65/notes.txt similarity index 100% rename from examples/chess/apple2-cc65/notes.txt rename to examples/defunct-explorations/chess/apple2-cc65/notes.txt diff --git a/examples/defunct-explorations/chess/apple2-cc65/obj/apple2/apple2idiot.d b/examples/defunct-explorations/chess/apple2-cc65/obj/apple2/apple2idiot.d new file mode 100644 index 0000000..ad33b9a --- /dev/null +++ b/examples/defunct-explorations/chess/apple2-cc65/obj/apple2/apple2idiot.d @@ -0,0 +1,4 @@ +obj/apple2/apple2idiot.o: src/apple2idiot.c src/globals.h src/apple2idiot.h src/../../../../arduino-lib/Apple2Idiot/A2I_commands.h + +src/apple2idiot.c src/globals.h src/apple2idiot.h src/../../../../arduino-lib/Apple2Idiot/A2I_commands.h: + diff --git a/examples/chess/apple2-cc65/obj/apple2/foo.d b/examples/defunct-explorations/chess/apple2-cc65/obj/apple2/foo.d similarity index 100% rename from examples/chess/apple2-cc65/obj/apple2/foo.d rename to examples/defunct-explorations/chess/apple2-cc65/obj/apple2/foo.d diff --git a/examples/chess/apple2-cc65/obj/apple2/inputline.d b/examples/defunct-explorations/chess/apple2-cc65/obj/apple2/inputline.d similarity index 100% rename from examples/chess/apple2-cc65/obj/apple2/inputline.d rename to examples/defunct-explorations/chess/apple2-cc65/obj/apple2/inputline.d diff --git a/examples/chess/apple2-cc65/obj/apple2/main.d b/examples/defunct-explorations/chess/apple2-cc65/obj/apple2/main.d similarity index 100% rename from examples/chess/apple2-cc65/obj/apple2/main.d rename to examples/defunct-explorations/chess/apple2-cc65/obj/apple2/main.d diff --git a/examples/chess/apple2-cc65/obj/apple2/menu.d b/examples/defunct-explorations/chess/apple2-cc65/obj/apple2/menu.d similarity index 100% rename from examples/chess/apple2-cc65/obj/apple2/menu.d rename to examples/defunct-explorations/chess/apple2-cc65/obj/apple2/menu.d diff --git a/examples/chess/apple2-cc65/obj/apple2/screen.d b/examples/defunct-explorations/chess/apple2-cc65/obj/apple2/screen.d similarity index 100% rename from examples/chess/apple2-cc65/obj/apple2/screen.d rename to examples/defunct-explorations/chess/apple2-cc65/obj/apple2/screen.d diff --git a/examples/defunct-explorations/chess/apple2-cc65/src/apple2idiot.c b/examples/defunct-explorations/chess/apple2-cc65/src/apple2idiot.c new file mode 120000 index 0000000..fe2a948 --- /dev/null +++ b/examples/defunct-explorations/chess/apple2-cc65/src/apple2idiot.c @@ -0,0 +1 @@ +../../../../cc65-lib/apple2idiot.c \ No newline at end of file diff --git a/examples/defunct-explorations/chess/apple2-cc65/src/apple2idiot.h b/examples/defunct-explorations/chess/apple2-cc65/src/apple2idiot.h new file mode 120000 index 0000000..3532461 --- /dev/null +++ b/examples/defunct-explorations/chess/apple2-cc65/src/apple2idiot.h @@ -0,0 +1 @@ +../../../../cc65-lib/apple2idiot.h \ No newline at end of file diff --git a/examples/chess/apple2-cc65/src/globals.h b/examples/defunct-explorations/chess/apple2-cc65/src/globals.h similarity index 100% rename from examples/chess/apple2-cc65/src/globals.h rename to examples/defunct-explorations/chess/apple2-cc65/src/globals.h diff --git a/examples/chess/apple2-cc65/src/main.c b/examples/defunct-explorations/chess/apple2-cc65/src/main.c similarity index 100% rename from examples/chess/apple2-cc65/src/main.c rename to examples/defunct-explorations/chess/apple2-cc65/src/main.c diff --git a/examples/chess/apple2-cc65/src/menu.c b/examples/defunct-explorations/chess/apple2-cc65/src/menu.c similarity index 100% rename from examples/chess/apple2-cc65/src/menu.c rename to examples/defunct-explorations/chess/apple2-cc65/src/menu.c diff --git a/examples/chess/apple2-cc65/src/menu.h b/examples/defunct-explorations/chess/apple2-cc65/src/menu.h similarity index 100% rename from examples/chess/apple2-cc65/src/menu.h rename to examples/defunct-explorations/chess/apple2-cc65/src/menu.h diff --git a/examples/chess/chess.ino b/examples/defunct-explorations/chess/chess.ino similarity index 100% rename from examples/chess/chess.ino rename to examples/defunct-explorations/chess/chess.ino diff --git a/examples/chess/chess_commands.h b/examples/defunct-explorations/chess/chess_commands.h similarity index 100% rename from examples/chess/chess_commands.h rename to examples/defunct-explorations/chess/chess_commands.h diff --git a/examples/chess/globals.h b/examples/defunct-explorations/chess/globals.h similarity index 100% rename from examples/chess/globals.h rename to examples/defunct-explorations/chess/globals.h diff --git a/examples/ntp_prodos_clock_driver/asm/BELL#068000 b/examples/defunct-explorations/ntp_prodos_clock_driver/asm/BELL#068000 similarity index 100% rename from examples/ntp_prodos_clock_driver/asm/BELL#068000 rename to examples/defunct-explorations/ntp_prodos_clock_driver/asm/BELL#068000 diff --git a/examples/ntp_prodos_clock_driver/asm/BELL.S b/examples/defunct-explorations/ntp_prodos_clock_driver/asm/BELL.S similarity index 100% rename from examples/ntp_prodos_clock_driver/asm/BELL.S rename to examples/defunct-explorations/ntp_prodos_clock_driver/asm/BELL.S diff --git a/examples/ntp_prodos_clock_driver/asm/PDCLOCKTEST.S b/examples/defunct-explorations/ntp_prodos_clock_driver/asm/PDCLOCKTEST.S similarity index 100% rename from examples/ntp_prodos_clock_driver/asm/PDCLOCKTEST.S rename to examples/defunct-explorations/ntp_prodos_clock_driver/asm/PDCLOCKTEST.S diff --git a/examples/ntp_prodos_clock_driver/asm/make.sh b/examples/defunct-explorations/ntp_prodos_clock_driver/asm/make.sh similarity index 100% rename from examples/ntp_prodos_clock_driver/asm/make.sh rename to examples/defunct-explorations/ntp_prodos_clock_driver/asm/make.sh diff --git a/examples/ntp_prodos_clock_driver/asm/ntp_clock_dev-prodos.po b/examples/defunct-explorations/ntp_prodos_clock_driver/asm/ntp_clock_dev-prodos.po similarity index 100% rename from examples/ntp_prodos_clock_driver/asm/ntp_clock_dev-prodos.po rename to examples/defunct-explorations/ntp_prodos_clock_driver/asm/ntp_clock_dev-prodos.po diff --git a/examples/slack/ArduinoSlack.cpp b/examples/defunct-explorations/slack/ArduinoSlack.cpp similarity index 100% rename from examples/slack/ArduinoSlack.cpp rename to examples/defunct-explorations/slack/ArduinoSlack.cpp diff --git a/examples/slack/ArduinoSlack.h b/examples/defunct-explorations/slack/ArduinoSlack.h similarity index 100% rename from examples/slack/ArduinoSlack.h rename to examples/defunct-explorations/slack/ArduinoSlack.h diff --git a/examples/slack/ArduinoSlackCert.h b/examples/defunct-explorations/slack/ArduinoSlackCert.h similarity index 100% rename from examples/slack/ArduinoSlackCert.h rename to examples/defunct-explorations/slack/ArduinoSlackCert.h diff --git a/examples/slack/README.md b/examples/defunct-explorations/slack/README.md similarity index 100% rename from examples/slack/README.md rename to examples/defunct-explorations/slack/README.md diff --git a/examples/slack/bad_data/bad.json b/examples/defunct-explorations/slack/bad_data/bad.json similarity index 100% rename from examples/slack/bad_data/bad.json rename to examples/defunct-explorations/slack/bad_data/bad.json diff --git a/examples/slack/bad_data/bad_json.raw b/examples/defunct-explorations/slack/bad_data/bad_json.raw similarity index 100% rename from examples/slack/bad_data/bad_json.raw rename to examples/defunct-explorations/slack/bad_data/bad_json.raw diff --git a/examples/slack/bad_data/foo.foo b/examples/defunct-explorations/slack/bad_data/foo.foo similarity index 100% rename from examples/slack/bad_data/foo.foo rename to examples/defunct-explorations/slack/bad_data/foo.foo diff --git a/examples/slack/bad_data/good.json b/examples/defunct-explorations/slack/bad_data/good.json similarity index 100% rename from examples/slack/bad_data/good.json rename to examples/defunct-explorations/slack/bad_data/good.json diff --git a/examples/slack/bad_data/good_json.raw b/examples/defunct-explorations/slack/bad_data/good_json.raw similarity index 100% rename from examples/slack/bad_data/good_json.raw rename to examples/defunct-explorations/slack/bad_data/good_json.raw diff --git a/examples/slack/bad_data/user.conversations.test.pretty.all.json b/examples/defunct-explorations/slack/bad_data/user.conversations.test.pretty.all.json similarity index 100% rename from examples/slack/bad_data/user.conversations.test.pretty.all.json rename to examples/defunct-explorations/slack/bad_data/user.conversations.test.pretty.all.json diff --git a/examples/slack/bad_data/user.conversations.test.pretty.one.json b/examples/defunct-explorations/slack/bad_data/user.conversations.test.pretty.one.json similarity index 100% rename from examples/slack/bad_data/user.conversations.test.pretty.one.json rename to examples/defunct-explorations/slack/bad_data/user.conversations.test.pretty.one.json diff --git a/examples/slack/example_credentials.h b/examples/defunct-explorations/slack/example_credentials.h similarity index 100% rename from examples/slack/example_credentials.h rename to examples/defunct-explorations/slack/example_credentials.h diff --git a/examples/slack/myTest.ino.old b/examples/defunct-explorations/slack/myTest.ino.old similarity index 100% rename from examples/slack/myTest.ino.old rename to examples/defunct-explorations/slack/myTest.ino.old diff --git a/examples/slack/slack.ino b/examples/defunct-explorations/slack/slack.ino similarity index 100% rename from examples/slack/slack.ino rename to examples/defunct-explorations/slack/slack.ino diff --git a/examples/RRAM.BAS b/examples/old_basic_examples/RRAM.BAS similarity index 100% rename from examples/RRAM.BAS rename to examples/old_basic_examples/RRAM.BAS diff --git a/examples/STRREAD.SUB.BAS b/examples/old_basic_examples/STRREAD.SUB.BAS similarity index 100% rename from examples/STRREAD.SUB.BAS rename to examples/old_basic_examples/STRREAD.SUB.BAS diff --git a/examples/STRWRITE.SUB.BAS b/examples/old_basic_examples/STRWRITE.SUB.BAS similarity index 100% rename from examples/STRWRITE.SUB.BAS rename to examples/old_basic_examples/STRWRITE.SUB.BAS diff --git a/examples/WRAM.BAS b/examples/old_basic_examples/WRAM.BAS similarity index 100% rename from examples/WRAM.BAS rename to examples/old_basic_examples/WRAM.BAS diff --git a/examples/rot13/CMDROT.BAS b/examples/old_basic_examples/rot13/CMDROT.BAS similarity index 100% rename from examples/rot13/CMDROT.BAS rename to examples/old_basic_examples/rot13/CMDROT.BAS diff --git a/examples/rot13/ROT13.BAS b/examples/old_basic_examples/rot13/ROT13.BAS similarity index 100% rename from examples/rot13/ROT13.BAS rename to examples/old_basic_examples/rot13/ROT13.BAS diff --git a/examples/rot13/rot13.ino b/examples/old_basic_examples/rot13/rot13.ino similarity index 100% rename from examples/rot13/rot13.ino rename to examples/old_basic_examples/rot13/rot13.ino diff --git a/examples/old_basic_examples/weather.ino b/examples/old_basic_examples/weather.ino new file mode 100644 index 0000000..780610c --- /dev/null +++ b/examples/old_basic_examples/weather.ino @@ -0,0 +1,179 @@ +/* +Use this program with the Apple2idIOT card and the basic programs RRAM, WRAM and CMDROT to read/write and rot13 +a single string contained within the dual port ram on the card. +CA = 49664 +AA = CA + 1 +*/ + +// Load Wi-Fi library +#include +#include +#include +#include + +Apple2Idiot a2i = Apple2Idiot(); + +#define COMMAND_SET_COUNTRY 200 +#define COMMAND_SET_CITY 201 +#define COMMAND_FETCH_WEATHER 205 + +const char* wifi_ssid = "GSO"; +const char* wifi_password = "xerxes27"; + +/*******************/ +/* Weather Service */ +/*******************/ + +const String weather_service_api_key= "0ab97bbbea58592d7c9d64067a34d2d0"; +const String weather_url = "http://api.openweathermap.org/data/2.5/weather?"; + +String country_code = "US"; +String city_name = "Tucson"; + +/*******************/ +/* Misc */ +/*******************/ + +const long readLoopInterval = 100; // millis +unsigned long lastReadLoopTime = 0; + +byte lastAppleCommand = 0; + +/*################################################ +# Setup # +################################################*/ + +void setup() { + Serial.begin(115200); + + a2i.init(); + + Serial.println(""); + Serial.println("Starting wifi..."); + Serial.print(" connecting to: "); + Serial.println(wifi_ssid); + + WiFi.begin(wifi_ssid, wifi_password); + while (WiFi.status() != WL_CONNECTED) { + delay(600); + Serial.print("."); + } + + Serial.println(""); + Serial.println("WiFi connected successfully"); + Serial.print("Got IP: "); + Serial.println(WiFi.localIP()); //Show ESP32 IP on serial + + Serial.println("Setup done"); +} + +/*################################################ +# Functions # +################################################*/ + +byte fetch_weather() { + + byte result = 0; + HTTPClient http; + //const String request_url = weather_url + "q=Tucson,us&APPID=" + weather_service_api_key; + const String request_url = weather_url + "q=" + city_name + "," + country_code + "&APPID=" + weather_service_api_key; + Serial.println(request_url); + http.begin(request_url); + int httpCode = http.GET(); //Make the request + delay(10); + + if (httpCode > 0) { //Check for the returning code + String payload = http.getString(); + //Serial.println(httpCode); + Serial.println("++++++++++++++++++++++++"); + Serial.println(payload); + Serial.println("++++++++++++++++++++++++"); + StaticJsonDocument<200> filter; + filter["weather"][0]["main"] = true; + filter["weather"][0]["description"] = true; + filter["main"]["humidity"] = true; + filter["main"]["temp"] = true; + filter["wind"]["speed"] = true; + filter["wind"]["deg"] = true; + StaticJsonDocument<400> doc; + DeserializationError error = deserializeJson(doc, payload, DeserializationOption::Filter(filter)); + //DeserializationError error = deserializeJson(doc, payload); + if (error) { + Serial.print(F("deserializeJson() failed: ")); + Serial.println(error.f_str()); + } else { + Serial.println("----------------------"); + serializeJsonPretty(doc, Serial); + Serial.println("----------------------"); + serializeJsonPretty(doc["wind"], Serial); + Serial.println("----------------------"); + String temp = doc["main"]["temp"]; + String humidity = doc["main"]["humidity"]; + String wind_speed = doc["wind"]["speed"]; + String wind_deg = doc["wind"]["deg"]; + String weather_description1 = doc["weather"][0]["main"]; + String weather_description2 = doc["weather"][0]["description"]; + int address_counter = a2i.write_string_to_shared_ram(temp, SHARED_RAM_START_ADDRESS); + address_counter = a2i.write_string_to_shared_ram(humidity, address_counter + 1); + address_counter = a2i.write_string_to_shared_ram(wind_speed, address_counter + 1); + address_counter = a2i.write_string_to_shared_ram(wind_deg, address_counter + 1); + address_counter = a2i.write_string_to_shared_ram(weather_description1, address_counter + 1); + address_counter = a2i.write_string_to_shared_ram(weather_description2, address_counter + 1); + } + result = ACK; + } + else { + Serial.println("Error on HTTP request"); + result = ERR; + } + + http.end(); //Free the resources + return result; +} + + +/*################################################ +# Main # +################################################*/ + +void loop() { + + if ((millis() - lastReadLoopTime) > readLoopInterval) { + byte command_byte = a2i.read_data(APPLE_COMMAND_ADDRESS); + if (command_byte == RAM_BUSY) { + Serial.println("Command Read: RAM BUSY"); + } + else if (command_byte != lastAppleCommand){ + byte result = 0; + Serial.print("Command Switch command_byte: "); + Serial.println(command_byte); + switch(command_byte) { + case COMMAND_SET_COUNTRY: + Serial.println("COMMAND_SET_COUNTRY"); + a2i.write_data(ESP_COMMAND_ADDRESS, ACK); // notify Apple IIe we are processing command byte + country_code = a2i.read_string_from_ram(SHARED_RAM_START_ADDRESS); + Serial.println("Received: ["+country_code+"]"); + a2i.write_data(APPLE_COMMAND_ADDRESS, ACK); + a2i.write_data(ESP_COMMAND_ADDRESS, EOT); // notify Apple IIe we are done processing command byte + break; + case COMMAND_SET_CITY: + Serial.println("COMMAND_SET_CITY"); + a2i.write_data(ESP_COMMAND_ADDRESS, ACK); // notify Apple IIe we are processing command byte + city_name = a2i.read_string_from_ram(SHARED_RAM_START_ADDRESS); + Serial.println("Received: ["+city_name+"]"); + a2i.write_data(APPLE_COMMAND_ADDRESS, ACK); + a2i.write_data(ESP_COMMAND_ADDRESS, EOT); // notify Apple IIe we are done processing command byte + break; + case COMMAND_FETCH_WEATHER: + Serial.println("COMMAND_FETCH_WEATHER"); + a2i.write_data(ESP_COMMAND_ADDRESS, ACK); // notify Apple IIe we are processing command byte + result = fetch_weather(); + a2i.write_data(APPLE_COMMAND_ADDRESS, ACK); + a2i.write_data(ESP_COMMAND_ADDRESS, result); // notify Apple IIe we are done processing command byte + break; + } + lastAppleCommand = command_byte; + } + lastReadLoopTime = millis(); + } +} diff --git a/examples/weather/WEATHER.BAS b/examples/old_basic_examples/weather/WEATHER.BAS similarity index 100% rename from examples/weather/WEATHER.BAS rename to examples/old_basic_examples/weather/WEATHER.BAS diff --git a/examples/wifi_scan/CSCANWIFI.BAS b/examples/old_basic_examples/wifi_scan/CSCANWIFI.BAS similarity index 100% rename from examples/wifi_scan/CSCANWIFI.BAS rename to examples/old_basic_examples/wifi_scan/CSCANWIFI.BAS diff --git a/examples/wifi_scan/SCANWIFI.BAS b/examples/old_basic_examples/wifi_scan/SCANWIFI.BAS similarity index 100% rename from examples/wifi_scan/SCANWIFI.BAS rename to examples/old_basic_examples/wifi_scan/SCANWIFI.BAS diff --git a/examples/wifi_scan/SHOWIP.BAS b/examples/old_basic_examples/wifi_scan/SHOWIP.BAS similarity index 100% rename from examples/wifi_scan/SHOWIP.BAS rename to examples/old_basic_examples/wifi_scan/SHOWIP.BAS diff --git a/examples/wifi_scan/wifi_scan.ino b/examples/old_basic_examples/wifi_scan/wifi_scan.ino similarity index 100% rename from examples/wifi_scan/wifi_scan.ino rename to examples/old_basic_examples/wifi_scan/wifi_scan.ino diff --git a/examples/slack/tags b/examples/slack/tags deleted file mode 100644 index a4889c0..0000000 --- a/examples/slack/tags +++ /dev/null @@ -1,83 +0,0 @@ -!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/ -!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/ -!_TAG_PROGRAM_AUTHOR Darren Hiebert /dhiebert@users.sourceforge.net/ -!_TAG_PROGRAM_NAME Exuberant Ctags // -!_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/ -!_TAG_PROGRAM_VERSION 5.9~svn20110310 // -ArduinoSlack ArduinoSlack.cpp /^ArduinoSlack::ArduinoSlack(Client &client, const char *bearerToken)$/;" f class:ArduinoSlack -ArduinoSlack ArduinoSlack.h /^class ArduinoSlack$/;" c -ArduinoSlack_h ArduinoSlack.h 10;" d -CREDENTIALS_H credentials.h 2;" d -NUM_USERS_TO_SUPPORT ArduinoSlack.h 60;" d -SLACK_ACCESS_TOKEN credentials.h 6;" d -SLACK_CONVERSATIONS_HISTORY_ENDPOINT ArduinoSlack.h 48;" d -SLACK_DEBUG_SERIAL ArduinoSlack.h 30;" d -SLACK_DEBUG_SERIAL ArduinoSlack.h 33;" d -SLACK_DEBUG_SERIAL_LN ArduinoSlack.h 31;" d -SLACK_DEBUG_SERIAL_LN ArduinoSlack.h 34;" d -SLACK_ENABLE_DEBUG ArduinoSlack.h 19;" d -SLACK_ENABLE_SERIAL ArduinoSlack.h 16;" d -SLACK_FINGERPRINT ArduinoSlack.h 39;" d -SLACK_HOST ArduinoSlack.h 37;" d -SLACK_POST_MESSAGE_ENDPOINT ArduinoSlack.h 47;" d -SLACK_PRESENCE_AUTO ArduinoSlack.h 43;" d -SLACK_PRESENCE_AWAY ArduinoSlack.h 42;" d -SLACK_SERIAL ArduinoSlack.h 22;" d -SLACK_SERIAL ArduinoSlack.h 25;" d -SLACK_SERIAL_LN ArduinoSlack.h 23;" d -SLACK_SERIAL_LN ArduinoSlack.h 26;" d -SLACK_TIMEOUT ArduinoSlack.h 40;" d -SLACK_USERS_CONVERSATIONS_ENDPOINT ArduinoSlack.h 49;" d -SLACK_USERS_PROFILE_SET_ENDPOINT ArduinoSlack.h 45;" d -SLACK_USERS_SET_PRESENCE_ENDPOINT ArduinoSlack.h 46;" d -SlackMessage ArduinoSlack.h /^struct SlackMessage$/;" s -SlackMessages ArduinoSlack.h /^struct SlackMessages {$/;" s -SlackProfile ArduinoSlack.h /^struct SlackProfile$/;" s -SlackUsers ArduinoSlack.h /^struct SlackUsers$/;" s -SlackUsersConversations ArduinoSlack.h /^struct SlackUsersConversations {$/;" s -WIFI_PASSWORD credentials.h 5;" d -WIFI_SSID credentials.h 4;" d -_bearerToken ArduinoSlack.h /^ const char *_bearerToken;$/;" m class:ArduinoSlack -channelHistory ArduinoSlack.cpp /^SlackMessages ArduinoSlack::channelHistory(char *channelId) {$/;" f class:ArduinoSlack -channelIds ArduinoSlack.h /^ char *channelIds[22];$/;" m struct:SlackUsersConversations -channelNames ArduinoSlack.h /^ char *channelNames[22];$/;" m struct:SlackUsersConversations -channelsObj ArduinoSlack.h /^ JsonObject channelsObj;$/;" m struct:SlackUsersConversations -client ArduinoSlack.h /^ Client *client;$/;" m class:ArduinoSlack -closeClient ArduinoSlack.cpp /^void ArduinoSlack::closeClient()$/;" f class:ArduinoSlack -displayName ArduinoSlack.h /^ char *displayName;$/;" m struct:SlackProfile -error ArduinoSlack.h /^ bool error;$/;" m struct:SlackMessages -error ArduinoSlack.h /^ bool error;$/;" m struct:SlackMessage -error ArduinoSlack.h /^ bool error;$/;" m struct:SlackProfile -error ArduinoSlack.h /^ bool error;$/;" m struct:SlackUsersConversations -getConvHistEndpointArgs ArduinoSlack.h /^ const char *getConvHistEndpointArgs =$/;" m class:ArduinoSlack -getHttpStatusCode ArduinoSlack.cpp /^int ArduinoSlack::getHttpStatusCode()$/;" f class:ArduinoSlack -id ArduinoSlack.h /^ char *id[NUM_USERS_TO_SUPPORT];$/;" m struct:SlackUsers -is_channel ArduinoSlack.h /^ bool is_channel;$/;" m struct:SlackUsersConversations -makeGetRequest ArduinoSlack.cpp /^int ArduinoSlack::makeGetRequest(const char *command)$/;" f class:ArduinoSlack -makePostRequest ArduinoSlack.cpp /^int ArduinoSlack::makePostRequest(const char *command, const char *body, const char *contentType)$/;" f class:ArduinoSlack -messages ArduinoSlack.h /^ SlackMessage messages[30];$/;" m struct:SlackMessages -n_channels ArduinoSlack.h /^ int n_channels;$/;" m struct:SlackUsersConversations -n_messages ArduinoSlack.h /^ int n_messages;$/;" m struct:SlackMessages -n_messages ArduinoSlack.h /^ int n_messages;$/;" m struct:SlackMessage -name ArduinoSlack.h /^ char *name[NUM_USERS_TO_SUPPORT];$/;" m struct:SlackUsers -portNumber ArduinoSlack.h /^ int portNumber = 443;$/;" m class:ArduinoSlack -postMessage ArduinoSlack.cpp /^SlackMessage ArduinoSlack::postMessage(const char *channel, const char *text) {$/;" f class:ArduinoSlack -profileBufferSize ArduinoSlack.h /^ int profileBufferSize = 10000;$/;" m class:ArduinoSlack -purpose ArduinoSlack.h /^ char *purpose[200];$/;" m struct:SlackUsersConversations -setConvoHistoryBody ArduinoSlack.h /^ const char *setConvoHistoryBody =$/;" m class:ArduinoSlack -setCustomStatus ArduinoSlack.cpp /^SlackProfile ArduinoSlack::setCustomStatus(const char *text, const char *emoji, int expiration)$/;" f class:ArduinoSlack -setEndpointBody ArduinoSlack.h /^ const char *setEndpointBody =$/;" m class:ArduinoSlack -setMessageBody ArduinoSlack.h /^ const char *setMessageBody =$/;" m class:ArduinoSlack -setPresence ArduinoSlack.cpp /^bool ArduinoSlack::setPresence(const char *presence)$/;" f class:ArduinoSlack -skipHeaders ArduinoSlack.cpp /^void ArduinoSlack::skipHeaders(bool tossUnexpectedForJSON)$/;" f class:ArduinoSlack -slack_server_cert ArduinoSlackCert.h /^const char *slack_server_cert = "-----BEGIN CERTIFICATE-----\\n"$/;" v -statusEmoji ArduinoSlack.h /^ char *statusEmoji;$/;" m struct:SlackProfile -statusExpiration ArduinoSlack.h /^ int statusExpiration;$/;" m struct:SlackProfile -statusText ArduinoSlack.h /^ char *statusText;$/;" m struct:SlackProfile -stripBadDataFromClientResponse ArduinoSlack.cpp /^void ArduinoSlack::stripBadDataFromClientResponse(char *payload) {$/;" f class:ArduinoSlack -text ArduinoSlack.h /^ char *text;$/;" m struct:SlackMessage -topic ArduinoSlack.h /^ char *topic[200];$/;" m struct:SlackUsersConversations -type ArduinoSlack.h /^ char *type;$/;" m struct:SlackMessage -userid ArduinoSlack.h /^ char *userid;$/;" m struct:SlackMessage -username ArduinoSlack.h /^ char *username;$/;" m struct:SlackMessage -usersConversations ArduinoSlack.cpp /^SlackUsersConversations ArduinoSlack::usersConversations()$/;" f class:ArduinoSlack