diff --git a/NOTES.txt b/NOTES.txt deleted file mode 100644 index bd7ae63..0000000 --- a/NOTES.txt +++ /dev/null @@ -1,9 +0,0 @@ -Name Release MS Version ROM 9digit INPUTBUFFER extensions comment -Commodore BASIC 1 1977 Y Y ZP CBM -OSI BASIC 1977 1.0 REV 3.2 Y N ZP - CONFIG_10A -AppleSoft I 1977 1.1 N Y $0200 Apple CONFIG_11 -KIM BASIC 1977 1.1 N Y ZP - CONFIG_11A -AppleSoft II 1978 Y Y $0200 Apple CONFIG_2 -Commodore BASIC 2 1979 Y Y $0200 CBM CONFIG_2A -KBD BASIC 1980 Y N $0700 KBD CONFIG_2B -MicroTAN 1979 Y Y ZP - CONFIG_2C diff --git a/TODO.txt b/TODO.txt index d49a61f..a71708a 100644 --- a/TODO.txt +++ b/TODO.txt @@ -5,11 +5,6 @@ * add AppleSoft comments * look for all " $", i.e. (zeropage) constants, replace them with symbols -* check all .ifdef OSI; they might be .ifdef CONFIG_SMALL -* check for KBD whether it's CONFIG_2 && CONFIG_SMALL (float - etc.) -* there must be no platform ifdefs in generic files +* convert platform ifdefs in generic files into feature ifdefs or macros * reconstruct pre-CBM1, i.e. CBM1 without the patches * add some comments to every file -* clean up all CONFIG_*, maybe some should go away -* look for all || and && and convert them into CONFIG_* \ No newline at end of file diff --git a/defines_cbm1.s b/defines_cbm1.s index 7685f16..8f64a36 100644 --- a/defines_cbm1.s +++ b/defines_cbm1.s @@ -1,26 +1,3 @@ -;CONFIG_CBM1_PATCHES := 1 ; ** don't turn off! ** -;CONFIG_CBM_ALL := 1 -;CONFIG_DATAFLG := 1 -;CONFIG_EASTER_EGG := 1 -;CONFIG_FILE := 1; support PRINT#, INPUT#, GET#, CMD -;CONFIG_IO_MSB := 1 ; all I/O has bit #7 set -;CONFIG_MONCOUT_DESTROYS_Y := 1 -;CONFIG_NO_CR := 1; terminal doesn't need explicit CRs on line ends -;CONFIG_NO_LINE_EDITING := 1; support for "@", "_", BEL etc. -;CONFIG_NO_POKE := 1 -;CONFIG_NO_READ_Y_IS_ZERO_HACK := 1 -;CONFIG_NULL := 1 -;CONFIG_PEEK_SAVE_LINNUM := 1 -;CONFIG_PRINTNULLS := 1; whether PRINTNULLS does anything -;CONFIG_PRINT_CR := 1 ; print CR when line end reached -;CONFIG_RAM := 1 -;CONFIG_ROR_WORKAROUND := 1; doesn't work with CONFIG_SMALL! -;CONFIG_SAFE_NAMENOTFOUND := 1 -;CONFIG_SCRTCH_ORDER := 1 -;CONFIG_SCRTCH_ORDER := 2 -;CONFIG_SCRTCH_ORDER := 3 -;CONFIG_SMALL := 1 - ; configuration ; oldest known version, no CONFIG_n diff --git a/init.s b/init.s index 3599706..c73083e 100644 --- a/init.s +++ b/init.s @@ -379,7 +379,7 @@ QT_WRITTEN_BY: asc80 "COPYRIGHT 1977 BY MICROSOFT CO" .byte CR,0 .else - .byte CR,LF,$0C + .byte CR,LF,$0C ; FORM FEED .ifndef CONFIG_11 .byte "WRITTEN BY RICHARD W. WEILAND." .else diff --git a/msbasic.s b/msbasic.s index 7c259b1..1d69391 100644 --- a/msbasic.s +++ b/msbasic.s @@ -1,4 +1,54 @@ ; Microsoft BASIC for 6502 +; +; This is a single integrated assembly source tree that can generate any of seven different +; versions of Microsoft BASIC for 6502. +; +; By running ./make.sh, this will generate all versions and compare them to the original +; files byte by byte. +; +; The CC65 compiler suite is need to build this project. +; +; These are the first eight (knows) versions of Microsoft BASIC for 6502: +; +; Name Release MS Version ROM 9digit INPUTBUFFER extensions comment +;--------------------------------------------------------------------------------------------------- +; Commodore BASIC 1 1977 Y Y ZP CBM +; OSI BASIC 1977 1.0 REV 3.2 Y N ZP - CONFIG_10A +; AppleSoft I 1977 1.1 N Y $0200 Apple CONFIG_11 +; KIM BASIC 1977 1.1 N Y ZP - CONFIG_11A +; AppleSoft II 1978 Y Y $0200 Apple CONFIG_2 +; Commodore BASIC 2 1979 Y Y $0200 CBM CONFIG_2A +; KBD BASIC 1980 Y N $0700 KBD CONFIG_2B +; MicroTAN 1980 Y Y ZP - CONFIG_2C +; +; (Note that this assembly source cannot (yet) build AppleSoft II.) +; +; This lists the versions in the order in which they were forked from the Microsoft source base. +; Commodore BASIC 1, as used on the original PET is the oldest known version of Microsoft BASIC +; for 6502. It contains some additions to Microsoft's version, like Commodore-style file I/O. +; +; The CONFIG_n defines specify what Microsoft-version the OEM version is based on. + +; CONFIG_CBM1_PATCHES jump out into CBM1's binary patches instead of doing the right thing inline +; CONFIG_CBM_ALL add all Commodore-specific additions except file I/O +; CONFIG_DATAFLG ? +; CONFIG_EASTER_EGG include the CBM2 "MICROSOFT!" easter egg +; CONFIG_FILE support Commodore PRINT#, INPUT#, GET#, CMD +; CONFIG_IO_MSB all I/O has bit #7 set +; CONFIG_MONCOUT_DESTROYS_Y Y needs to be preserved when calling MONCOUT +; CONFIG_NO_CR terminal doesn't need explicit CRs on line ends +; CONFIG_NO_LINE_EDITING disable support for Microsoft-style "@", "_", BEL etc. +; CONFIG_NO_POKE don't support PEEK, POKE and WAIT +; CONFIG_NO_READ_Y_IS_ZERO_HACK don't do a ver volatile trick that saves one byte +; CONFIG_NULL support for the NULL statement +; CONFIG_PEEK_SAVE_LINNUM preserve LINNUM on a PEEK +; CONFIG_PRINTNULLS whether PRINTNULLS does anything +; CONFIG_PRINT_CR print CR when line end reached +; CONFIG_RAM optimizations for RAM version of BASIC, only use on 1.x +; CONFIG_ROR_WORKAROUND use workaround for buggy 6502s from 1975/1976; doesn't work with CONFIG_SMALL! +; CONFIG_SAFE_NAMENOTFOUND check both bytes of the caller's address in NAMENOTFOUND +; CONFIG_SCRTCH_ORDER where in the init code to call SCRTCH +; CONFIG_SMALL use 6 digit FP instead of 9 digit, use 2 character error messages, don't have GET .debuginfo +