Binary SAVE/LOAD: SAVE now writes tokenized binary by default (0xFF header format), matching original GW-BASIC behavior. SAVE "file",A for ASCII. LOAD auto-detects binary vs ASCII from the first byte. Command-line file loading also auto-detects, so binary .BAS files just work. INKEY$ extended keys: arrow keys, Home/End/PgUp/PgDn, Insert/Delete, and F1-F10 now return the correct CHR$(0) + scan_code two-byte sequences per the IBM PC convention. Refactored event trap key parsing to use tui_read_key() instead of duplicating escape sequence parsing. Golden-file regression tests: generated .expected output files for 55 of 58 test programs (3 timing-dependent tests excluded). The test runner now reports compat match status alongside pass/fail. Classic programs: added Hamurabi, Lunar Lander, Gunner, and Diamond from David Ahl's BASIC Computer Games (1978) in tests/classic/ for manual compatibility testing. Docs updated with compiler roadmap item and hardware I/O simulator plan.
2 lines
6.1 KiB
Plaintext
2 lines
6.1 KiB
Plaintext
Pq#0;2;0;0;0#3;2;0;66;66#0!640~-#0!640~-#0!640~-#0!10~z!629~$#3!10?C!629?-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640B-\Pq#0;2;0;0;0#3;2;0;66;66#0!640~-#0!640~-#0!640~-#0!10~z!629~$#3!10?C!629?-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640B-\Pq#0;2;0;0;0#1;2;0;0;66#3;2;0;66;66#0}|zvn^!634~$#1@ACGO_!634?-#0!6~}|zvn^!628~$#1!6?@ACGO_!628?-#0!12~}|zvn^!622~$#1!12?@ACGO_!622?-#0!10~z!7~}|zvn^!616~$#1!18?@ACGO_!616?$#3!10?C!629?-#0!24~}|zvn^!610~$#1!24?@ACGO_!610?-#0!30~}|zvn^!604~$#1!30?@ACGO_!604?-#0!36~}|zvn^!598~$#1!36?@ACGO_!598?-#0!42~}|zvn^!592~$#1!42?@ACGO_!592?-#0!48~}|zvn^!586~$#1!48?@ACGO_!586?-#0!54~}|zvn^!580~$#1!54?@ACGO_!580?-#0!60~}|zvn^!574~$#1!60?@ACGO_!574?-#0!66~}|zvn^!568~$#1!66?@ACGO_!568?-#0!72~}|zvn^!562~$#1!72?@ACGO_!562?-#0!78~}|zvn^!556~$#1!78?@ACGO_!556?-#0!84~}|zvn^!550~$#1!84?@ACGO_!550?-#0!90~}|zvn^!544~$#1!90?@ACGO_!544?-#0!96~}|zvn!539~$#1!96?@ACGO!539?-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640B-\Pq#0;2;0;0;0#1;2;0;0;66#2;2;0;66;0#3;2;0;66;66#0}|zvn^!634~$#1@ACGO_!634?-#0!6~}|zvn^!628~$#1!6?@ACGO_!628?-#0!12~}|zvn^!622~$#1!12?@ACGO_!622?-#0!10~z!7~}|zvn^!616~$#1!18?@ACGO_!616?$#3!10?C!629?-#0!24~}|zvn^!610~$#1!24?@ACGO_!610?-#0!30~}|zvn^!604~$#1!30?@ACGO_!604?-#0!36~}|zvn^!598~$#1!36?@ACGO_!598?-#0!42~}|zvn^!592~$#1!42?@ACGO_!592?-#0!48~}|zvn^!91~^^^nnf!4v!11z!4vfnn^^^!464~$#1!48?@ACGO_!586?$#2!145?___OOW!4G!11C!4GWOO___!464?-#0!54~}|zvn^!76~^^nvrz||}}!29~}}||zrvn^^!455~$#1!54?@ACGO_!580?$#2!136?__OGKCAA@@!29?@@AACKGO__!455?-#0!60~}|zvn^!64~^nvzz{!49~{zzvn^!449~$#1!60?@ACGO_!574?$#2!130?_OGCCB!49?BCCGO_!449?-#0!66~}|zvn^!54~^nvx}!59~}xvn^!445~$#1!66?@ACGO_!568?$#2!126?_OGE@!59?@EGO_!445?-#0!72~}|zvn^!46~Np}!67~}pN!443~$#1!72?@ACGO_!562?$#2!124?oM@!67?@Mo!443?-#0!78~}|zvn^!37~Nr{!73~{rN!440~$#1!78?@ACGO_!556?$#2!121?oKB!73?BKo!440?-#0!84~}|zvn^!30~@}!77~}@!439~$#1!84?@ACGO_!550?$#2!120?}@!77?@}!439?-#0!90~}|zvn^!23~Fw!79~wF!438~$#1!90?@ACGO_!544?$#2!119?wF!79?Fw!438?-#0!96~}|zvn!18~?!81~?!438~$#1!96?@ACGO!539?$#2!119?~!81?~!438?-#0!119~?!81~?!438~$#2!119?~!81?~!438?-#0!120~?!79~?!439~$#2!120?~!79?~!439?-#0!120~{b^!75~^b{!439~$#2!120?B[_!75?_[B!439?-#0!122~}xf^!69~^fx}!441~$#2!122?@EW_!69?_WE@!441?-#0!125~{rn^!63~^nr{!444~$#2!125?BKO_!63?_OKB!444?-#0!129~{rn^!55~^nr{!448~$#2!129?BKO_!55?_OKB!448?-#0!133~}}xvvn^^!39~^^nvvx}}!452~$#2!133?@@EGGO__!39?__OGGE@@!452?-#0!140~}}||zrvvnnN!4^!11~!4^Nnnvvrz||}}!459~$#2!140?@@AACKGGOOo!4_!11?!4_oOOGGKCAA@@!459?-#0!155~!11}!474~$#2!155?!11@!474?-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640B-\Pq#0;2;0;0;0#1;2;0;0;66#2;2;0;66;0#3;2;0;66;66#0}|zvn^!634~$#1@ACGO_!634?-#0!6~}|zvn^!628~$#1!6?@ACGO_!628?-#0!12~}|zvn^!622~$#1!12?@ACGO_!622?-#0!10~z!7~}|zvn^!616~$#1!18?@ACGO_!616?$#3!10?C!629?-#0!24~}|zvn^!610~$#1!24?@ACGO_!610?-#0!30~}|zvn^!604~$#1!30?@ACGO_!604?-#0!36~}|zvn^!598~$#1!36?@ACGO_!598?-#0!42~}|zvn^!592~$#1!42?@ACGO_!592?-#0!48~}|zvn^!91~^^^nnf!4v!11z!4vfnn^^^!464~$#1!48?@ACGO_!586?$#2!145?___OOW!4G!11C!4GWOO___!464?-#0!54~}|zvn^!76~^^nvrz||}}!29~}}||zrvn^^!455~$#1!54?@ACGO_!580?$#2!136?__OGKCAA@@!29?@@AACKGO__!455?-#0!60~}|zvn^!64~^nvzz{!49~{zzvn^!449~$#1!60?@ACGO_!574?$#2!130?_OGCCB!49?BCCGO_!449?-#0!66~}|zvn^!54~^nvx}!59~}xvn^!445~$#1!66?@ACGO_!568?$#2!126?_OGE@!59?@EGO_!445?-#0!72~}|zvn^!46~Np}!67~}pN!443~$#1!72?@ACGO_!562?$#2!124?oM@!67?@Mo!443?-#0!78~}|zvn^!37~Nr{!73~{rN!440~$#1!78?@ACGO_!556?$#2!121?oKB!73?BKo!440?-#0!84~}|zvn^!30~@}!77~}@!439~$#1!84?@ACGO_!550?$#2!120?}@!77?@}!439?-#0!90~}|zvn^!23~Fw!39~?!9}?!29~wF!438~$#1!90?@ACGO_!64?~!9@~!469?$#2!119?wF!79?Fw!438?-#0!96~}|zvn!18~?!40~_!9n_!30~?!438~$#1!96?@ACGO!59?^!9O^!469?$#2!119?~!81?~!438?-#0!119~?!81~?!438~$#2!119?~!81?~!438?-#0!120~?!79~?!439~$#2!120?~!79?~!439?-#0!120~{b^!75~^b{!439~$#2!120?B[_!75?_[B!439?-#0!122~}xf^!69~^fx}!441~$#2!122?@EW_!69?_WE@!441?-#0!125~{rn^!63~^nr{!444~$#2!125?BKO_!63?_OKB!444?-#0!129~{rn^!55~^nr{!448~$#2!129?BKO_!55?_OKB!448?-#0!133~}}xvvn^^!39~^^nvvx}}!452~$#2!133?@@EGGO__!39?__OGGE@@!452?-#0!140~}}||zrvvnnN!4^!11~!4^Nnnvvrz||}}!459~$#2!140?@@AACKGGOOo!4_!11?!4_oOOGGKCAA@@!459?-#0!155~!11}!474~$#2!155?!11@!474?-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640B-\Pq#0;2;0;0;0#1;2;0;0;66#2;2;0;66;0#3;2;0;66;66#0}|zvn^!634~$#1@ACGO_!634?-#0!6~}|zvn^!628~$#1!6?@ACGO_!628?-#0!12~}|zvn^!622~$#1!12?@ACGO_!622?-#0!10~z!7~}|zvn^!616~$#1!18?@ACGO_!616?$#3!10?C!629?-#0!24~}|zvn^!610~$#1!24?@ACGO_!610?-#0!30~}|zvn^!604~$#1!30?@ACGO_!604?-#0!36~}|zvn^!598~$#1!36?@ACGO_!598?-#0!42~}|zvn^!592~$#1!42?@ACGO_!592?-#0!48~}|zvn^!91~^^^nnf!4v!11z!4vfnn^^^!464~$#1!48?@ACGO_!586?$#2!145?___OOW!4G!11C!4GWOO___!464?-#0!54~}|zvn^!76~^^nvrz||}}!29~}}||zrvn^^!455~$#1!54?@ACGO_!580?$#2!136?__OGKCAA@@!29?@@AACKGO__!455?-#0!60~}|zvn^!64~^nvzz{!49~{zzvn^!449~$#1!60?@ACGO_!574?$#2!130?_OGCCB!49?BCCGO_!449?-#0!66~}|zvn^!54~^nvx}!59~}xvn^!445~$#1!66?@ACGO_!568?$#2!126?_OGE@!59?@EGO_!445?-#0!72~}|zvn^!46~Np}!67~}pN!443~$#1!72?@ACGO_!562?$#2!124?oM@!67?@Mo!443?-#0!78~}|zvn^!37~Nr{!73~{rN!440~$#1!78?@ACGO_!556?$#2!121?oKB!73?BKo!440?-#0!84~}|zvn^!30~@}!77~}@!439~$#1!84?@ACGO_!550?$#2!120?}@!77?@}!439?-#0!90~}|zvn^!23~Fw!39~?!9}?!29~wF!438~$#1!90?@ACGO_!64?~!9@~!469?$#2!119?wF!79?Fw!438?-#0!96~}|zvn!18~?!40~_!9n_!30~?!438~$#1!96?@ACGO!59?^!9O^!469?$#2!119?~!81?~!438?-#0!119~?!81~?!438~$#2!119?~!81?~!438?-#0!120~?!79~?!439~$#2!120?~!79?~!439?-#0!120~{b^!75~^b{!439~$#2!120?B[_!75?_[B!439?-#0!122~}xf^!69~^fx}!441~$#2!122?@EW_!69?_WE@!441?-#0!125~{rn^!63~^nr{!444~$#2!125?BKO_!63?_OKB!444?-#0!129~{rn^!55~^nr{!448~$#2!129?BKO_!55?_OKB!448?-#0!133~}}xvvn^^!39~^^nvvx}}!452~$#2!133?@@EGGO__!39?__OGGE@@!452?-#0!140~}}||zrvvnnN!4^!11~!4^Nnnvvrz||}}!459~$#2!140?@@AACKGGOOo!4_!11?!4_oOOGGKCAA@@!459?-#0!155~!11}!474~$#2!155?!11@!474?-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640~-#0!640B-\Graphics stubs OK
|