diff --git a/TODO.txt b/TODO.txt index 9e8419c..c2e8ded 100644 --- a/TODO.txt +++ b/TODO.txt @@ -8,4 +8,5 @@ * 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 \ No newline at end of file +* there must be no platform ifdefs in generic files +* reconstruct pre-CBM1, i.e. CBM1 without the patches \ No newline at end of file diff --git a/defines.s b/defines.s index 1a4544e..0eac6a5 100644 --- a/defines.s +++ b/defines.s @@ -1,6 +1,6 @@ .if .def(cbmbasic1) CBM1 := 1 -.include "defines_cbm.s" +.include "defines_cbm1.s" .elseif .def(osi) OSI := 1 .include "defines_osi.s" @@ -12,7 +12,7 @@ KIM := 1 .include "defines_kim.s" .elseif .def(cbmbasic2) CBM2 := 1 -.include "defines_cbm.s" +.include "defines_cbm2.s" .elseif .def(kbdbasic) KBD := 1 .include "defines_kbd.s" diff --git a/defines_cbm1.s b/defines_cbm1.s new file mode 100644 index 0000000..9504e01 --- /dev/null +++ b/defines_cbm1.s @@ -0,0 +1,81 @@ +; oldest known version, no CONFIG_n +;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 +;CONFIG_SAFE_NAMENOTFOUND := 1 +;CONFIG_SCRTCH_ORDER := 1 +;CONFIG_SCRTCH_ORDER := 2 +;CONFIG_SCRTCH_ORDER := 3 +;CONFIG_SMALL := 1 +;CONFIG_SPC_IS_CRSR_RIGHT := 1; always print CRSR RIGHT for SPC() (otherwise only for screen output) + +; configuration +; oldest known version, no CONFIG_n + +CONFIG_CBM_ALL := 1 + +CONFIG_FILE := 1; support PRINT#, INPUT#, GET#, CMD +CONFIG_NO_CR := 1; terminal doesn't need explicit CRs on line ends +CONFIG_NO_LINE_EDITING := 1; support for "@", "_", BEL etc. +CONFIG_SCRTCH_ORDER := 2 + +CONFIG_CBM1_PATCHES := 1 ; ** don't turn off! ** +CONFIG_DATAFLG := 1 +CONFIG_PRINTNULLS := 1; whether PRINTNULLS does anything +CONFIG_SPC_IS_CRSR_RIGHT := 1; always print CRSR RIGHT for SPC() (otherwise only for screen output) + +; zero page +ZP_START0 = $00 +ZP_START0A = $04 +ZP_START1 = $5A +ZP_START2 = $65 + +; extra ZP variables +CURDVC := $0003 +Z96 := $020C +USR := GORESTART + + +; constants +SPACE_FOR_GOSUB := $36 +STACK_TOP := $FC +NULL_MAX := $0A +MAX_EXPON := 12 ; XXX override + +RAMSTART2 := $0400 + +; magic memory locations +ENTROPY = $9044 + +; monitor functions +OPEN := $FFC0 +CLOSE := $FFC3 +CHKIN := $FFC6 +CHKOUT := $FFC9 +CLRCH := $FFCC +CHRIN := $FFCF +CHROUT := $FFD2 +LOAD := $FFD5 +SAVE := $FFD8 +VERIFY := $FFDB +SYS := $FFDE +ISCNTC := $FFE1 +GETIN := $FFE4 +CLALL := $FFE7 +LE7F3 := $E7F3; for CBM1 +MONCOUT := CHROUT +MONRDKEY := GETIN diff --git a/defines_cbm.s b/defines_cbm2.s similarity index 59% rename from defines_cbm.s rename to defines_cbm2.s index d8f74ec..3a2e43f 100644 --- a/defines_cbm.s +++ b/defines_cbm2.s @@ -1,5 +1,4 @@ ; configuration -; common: CONFIG_CBM_ALL := 1 CONFIG_FILE := 1; support PRINT#, INPUT#, GET#, CMD @@ -7,34 +6,12 @@ CONFIG_NO_CR := 1; terminal doesn't need explicit CRs on line ends CONFIG_NO_LINE_EDITING := 1; support for "@", "_", BEL etc. CONFIG_SCRTCH_ORDER := 2 -.ifdef CBM1 -CONFIG_BUG_GET_ERROR := 1; treat GET error like READ error -CONFIG_CBM1_PATCHES := 1 ; ** don't turn off! ** -CONFIG_DATAFLAG := 1 -CONFIG_PRINTNULLS := 1; whether PRINTNULLS does anything -CONFIG_SPC_IS_CRSR_RIGHT := 1; always print CRSR RIGHT for SPC() (otherwise only for screen output) -.else CONFIG_2A := 1 -CONFIG_DATAFLAG := 1 +CONFIG_DATAFLG := 1 CONFIG_EASTER_EGG := 1 CONFIG_NO_READ_Y_IS_ZERO_HACK := 1 CONFIG_PEEK_SAVE_LINNUM := 1 -.endif - -.ifdef CBM1 -; zero page -ZP_START0 = $00 -ZP_START0A = $04 -ZP_START1 = $5A -ZP_START2 = $65 - -; extra ZP variables -Z03 := $0003 -Z96 := $020C -USR := GORESTART - -.else ; zero page ZP_START0 = $00 @@ -43,7 +20,7 @@ ZP_START1 = $03 ZP_START2 = $13 ; extra/override ZP variables -Z03 := $000E +CURDVC := $000E Z96 := $0096 POSX := $00C6 TXPSV := LASTOP @@ -52,29 +29,16 @@ USR := GORESTART ; XXX ; inputbuffer INPUTBUFFER := $0200 -.endif - ; constants -.ifdef CBM1 -SPACE_FOR_GOSUB := $36 -STACK_TOP := $FC -NULL_MAX := $0A -MAX_EXPON := 12 ; XXX override -.else SPACE_FOR_GOSUB := $3E STACK_TOP := $FA WIDTH := 40 WIDTH2 := 30 -.endif RAMSTART2 := $0400 ; magic memory locations -.ifdef CBM1 -ENTROPY = $9044 -.else ENTROPY = $E844 -.endif ; monitor functions OPEN := $FFC0 diff --git a/defines_osi.s b/defines_osi.s index cb61652..fe6861b 100644 --- a/defines_osi.s +++ b/defines_osi.s @@ -1,7 +1,7 @@ ; configuration CONFIG_10A := 1 -CONFIG_DATAFLAG := 1 +CONFIG_DATAFLG := 1 CONFIG_NULL := 1 CONFIG_PRINT_CR := 1 ; print CR when line end reached CONFIG_SCRTCH_ORDER := 3 diff --git a/init.s b/init.s index 7382746..40425b9 100644 --- a/init.s +++ b/init.s @@ -120,7 +120,7 @@ L4098: txa sta SHIFTSIGNEXT .ifdef CONFIG_CBM_ALL - sta Z03 + sta CURDVC .endif sta LASTPT+1 .if .defined(CONFIG_NULL) || .defined(CONFIG_PRINTNULLS) diff --git a/inline.s b/inline.s index e8e814f..5c591da 100644 --- a/inline.s +++ b/inline.s @@ -93,7 +93,7 @@ L2453: GETLN: .ifdef CONFIG_FILE jsr CHRIN - ldy Z03 + ldy CURDVC bne L2465 .else jsr MONRDKEY diff --git a/input.s b/input.s index 2330094..e708b63 100644 --- a/input.s +++ b/input.s @@ -9,7 +9,9 @@ INPUTERR: lda INPUTFLG beq RESPERR ; INPUT .ifndef CONFIG_SMALL -.ifndef CONFIG_BUG_GET_ERROR +.ifdef CONFIG_10A +; without this, it treats GET errors +; like READ errors bmi L2A63 ; READ ldy #$FF ; GET bne L2A67 @@ -30,7 +32,7 @@ SYNERR4: jmp SYNERR RESPERR: .ifdef CONFIG_FILE - lda Z03 + lda CURDVC beq LCA8F ldx #ERR_BADDATA jmp ERROR @@ -61,7 +63,7 @@ GET: lda #',' jsr SYNCHR jsr CHKIN - stx Z03 + stx CURDVC LCAB6: .endif ldx #<(INPUTBUFFER+1) @@ -76,7 +78,7 @@ LCAB6: jsr PROCESS_INPUT_LIST ; CBM: if GET#, then switch input back .ifdef CONFIG_FILE - ldx Z03 + ldx CURDVC bne LCAD8 .endif rts @@ -91,14 +93,14 @@ INPUTH: lda #$2C jsr SYNCHR jsr CHKIN - stx Z03 + stx CURDVC jsr L2A9E LCAD6: - lda Z03 + lda CURDVC LCAD8: jsr CLRCH ldx #$00 - stx Z03 + stx CURDVC rts LCAE0: .endif @@ -130,7 +132,7 @@ LCAF8: bmi L2ABE .else .ifdef CONFIG_FILE - lda Z03 + lda CURDVC beq LCB0C lda Z96 and #$02 @@ -142,7 +144,7 @@ LCB0C: lda INPUTBUFFER bne L2ABE .ifdef CONFIG_FILE - lda Z03 + lda CURDVC bne LCAF8 .endif .ifdef CONFIG_CBM1_PATCHES @@ -161,7 +163,7 @@ NXIN: jmp LE86C .else .ifdef CONFIG_FILE - lda Z03 + lda CURDVC bne LCB21 .endif jsr OUTQUES ; '?' @@ -265,7 +267,7 @@ L2AF0: .endif bmi FINDATA .ifdef CONFIG_FILE - lda Z03 + lda CURDVC bne LCB64 .endif .ifdef KBD @@ -393,7 +395,7 @@ L2B94: lda (INPTR),y beq L2BA1 .ifdef CONFIG_FILE - lda Z03 + lda CURDVC bne L2BA1 .endif lda #