Cleanup BASIC sources

This commit is contained in:
Kilian committed 2026-09-27 22:09:00 +02:00
1 parent 385de7a111
commit 25236f542d
36 files changed
+53 -2643

No files matched your search

-43
View File
@@ -20,10 +20,7 @@ L2FAF:
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
NEG32768: NEG32768:
.byte $90,$80,$00,$00 .byte $90,$80,$00,$00
.ifdef CONFIG_2C
.byte $00; bugfix: short number .byte $00; bugfix: short number
.endif
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; EVALUATE NUMERIC FORMULA AT TXTPTR ; EVALUATE NUMERIC FORMULA AT TXTPTR
@@ -32,20 +29,14 @@ NEG32768:
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
MAKINT: MAKINT:
jsr CHRGET jsr CHRGET
.ifdef CONFIG_2
jsr FRMEVL jsr FRMEVL
.else
jsr FRMNUM
.endif
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; CONVERT FAC TO INTEGER ; CONVERT FAC TO INTEGER
; MUST BE POSITIVE AND LESS THAN 32768 ; MUST BE POSITIVE AND LESS THAN 32768
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
MKINT: MKINT:
.ifdef CONFIG_2
jsr CHKNUM jsr CHKNUM
.endif
lda FACSIGN lda FACSIGN
bmi MI1 bmi MI1
@@ -70,9 +61,7 @@ MI2:
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
ARRAY: ARRAY:
lda DIMFLG lda DIMFLG
.ifndef CONFIG_SMALL
ora VALTYP+1 ora VALTYP+1
.endif
pha pha
lda VALTYP lda VALTYP
pha pha
@@ -109,10 +98,8 @@ L2FDE:
pla pla
sta VALTYP sta VALTYP
pla pla
.ifndef CONFIG_SMALL
sta VALTYP+1 sta VALTYP+1
and #$7F and #$7F
.endif
sta DIMFLG sta DIMFLG
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; SEARCH ARRAY TABLE FOR THIS ARRAY NAME ; SEARCH ARRAY TABLE FOR THIS ARRAY NAME
@@ -185,28 +172,19 @@ MAKE_NEW_ARRAY:
tay tay
sta STRNG2+1 sta STRNG2+1
ldx #BYTES_PER_ELEMENT ldx #BYTES_PER_ELEMENT
.if .def(CONFIG_SMALL) && (!.def(CONFIG_2))
stx STRNG2
.endif
lda VARNAM lda VARNAM
sta (LOWTR),y sta (LOWTR),y
.ifndef CONFIG_SMALL
bpl L3078 bpl L3078
dex dex
L3078: L3078:
.endif
iny iny
lda VARNAM+1 lda VARNAM+1
sta (LOWTR),y sta (LOWTR),y
.if (!.def(CONFIG_SMALL)) || .def(CONFIG_2)
bpl L3081 bpl L3081
dex dex
.if !(.def(CONFIG_SMALL) && .def(CONFIG_2))
dex dex
.endif
L3081: L3081:
stx STRNG2 stx STRNG2
.endif
lda EOLPNTR lda EOLPNTR
iny iny
iny iny
@@ -324,42 +302,21 @@ L3124:
stx STRNG2 stx STRNG2
dec EOLPNTR dec EOLPNTR
bne L30F6 bne L30F6
.if .def(CONFIG_SMALL) && (!.def(CONFIG_2))
asl STRNG2
rol a
bcs GSE
asl STRNG2
rol a
bcs GSE
tay
lda STRNG2
.else
.ifdef CONFIG_11A
sta STRNG2+1 sta STRNG2+1
.endif
ldx #BYTES_FP ldx #BYTES_FP
.ifdef CONFIG_SMALL
lda VARNAM+1
.else
lda VARNAM lda VARNAM
.endif
bpl L3135 bpl L3135
dex dex
L3135: L3135:
.ifdef CONFIG_SMALL
stx RESULT+1
.else
lda VARNAM+1 lda VARNAM+1
bpl L313B bpl L313B
dex dex
dex dex
L313B: L313B:
stx RESULT+2 stx RESULT+2
.endif
lda #$00 lda #$00
jsr MULTIPLY_SUBS1 jsr MULTIPLY_SUBS1
txa txa
.endif
adc HIGHDS adc HIGHDS
sta VARPNT sta VARPNT
tya tya
+2 -2
View File
@@ -2,5 +2,5 @@ if [ ! -d tmp ]; then
mkdir tmp mkdir tmp
fi fi
ca65 -D kilian msbasic.s -o tmp/kilian.o ca65 msbasic.s -o tmp/rom.o
ld65 -C kilian.cfg tmp/kilian.o -o tmp/kilian.bin -Ln tmp/kilian.lbl ld65 -C config.cfg tmp/rom.o -o tmp/rom.bin -Ln tmp/rom.lbl
-3
View File
@@ -7,9 +7,6 @@ GENERIC_CHRGET:
GENERIC_CHRGOT: GENERIC_CHRGOT:
GENERIC_TXTPTR = GENERIC_CHRGOT + 1 GENERIC_TXTPTR = GENERIC_CHRGOT + 1
lda $EA60 lda $EA60
.ifdef KBD
jsr LF430
.endif
cmp #$3A cmp #$3A
bcs L4058 bcs L4058
GENERIC_CHRGOT2: GENERIC_CHRGOT2:
+1 -1
View File
@@ -1,7 +1,7 @@
MEMORY { MEMORY {
ZP: start = $0000, size = $0100, type = rw; ZP: start = $0000, size = $0100, type = rw;
BASROM: start = $C000, size = $3F00, fill = yes, file = %O; BASROM: start = $C000, size = $3F00, fill = yes, file = %O;
WOZMON: start = $FDAA, size = $FA, fill = yes, file = %O; WOZMON: start = $FF00, size = $FA, fill = yes, file = %O;
RESETVEC: start = $FFFA, size = $6, fill = yes, file = %O; RESETVEC: start = $FFFA, size = $6, fill = yes, file = %O;
DUMMY: start = $0000, size = $00FF, file = ""; DUMMY: start = $0000, size = $00FF, file = "";
} }
+8 -80
View File
@@ -1,99 +1,27 @@
.if .def(cbmbasic1) ; extra/override ZP variables
CBM1 := 1 USR := GORESTART ; XXX
.include "defines_cbm1.s"
.elseif .def(osi)
OSI := 1
.include "defines_osi.s"
.elseif .def(applesoft)
APPLE := 1
.include "defines_apple.s"
.elseif .def(kb9)
KIM := 1
.include "defines_kim.s"
.elseif .def(cbmbasic2)
CBM2 := 1
.include "defines_cbm2.s"
.elseif .def(kbdbasic)
KBD := 1
.include "defines_kbd.s"
.elseif .def(microtan)
MICROTAN := 1
.include "defines_microtan.s"
.elseif .def(aim65)
AIM65 := 1
.include "defines_aim65.s"
.elseif .def(sym1)
SYM1 := 1
.include "defines_sym1.s"
.elseif .def(w65c816sxb)
W65C816SXB := 1
.include "defines_w65c816sxb.s"
.elseif .def(kilian)
KILIAN := 1
.include "defines_kilian.s"
.endif
.ifdef CONFIG_2C ; constants
CONFIG_2B := 1 SPACE_FOR_GOSUB := $3E
.endif STACK_TOP := $FA
.ifdef CONFIG_2B WIDTH := 80
CONFIG_2A := 1 WIDTH2 := 30
.endif RAMSTART2 := $0400
.ifdef CONFIG_2A
CONFIG_2 := 1
.endif
.ifdef CONFIG_2
CONFIG_11A := 1
.endif
.ifdef CONFIG_11A
CONFIG_11 := 1
.endif
.ifdef CONFIG_11
CONFIG_10A := 1
.endif
.ifdef CONFIG_SMALL
BYTES_FP := 4
CONFIG_SMALL_ERROR := 1
.else
BYTES_FP := 5 BYTES_FP := 5
.endif
.ifndef BYTES_PER_ELEMENT
BYTES_PER_ELEMENT := BYTES_FP BYTES_PER_ELEMENT := BYTES_FP
.endif
BYTES_PER_VARIABLE := BYTES_FP+2 BYTES_PER_VARIABLE := BYTES_FP+2
MANTISSA_BYTES := BYTES_FP-1 MANTISSA_BYTES := BYTES_FP-1
BYTES_PER_FRAME := 2*BYTES_FP+8 BYTES_PER_FRAME := 2*BYTES_FP+8
FOR_STACK1 := 2*BYTES_FP+5 FOR_STACK1 := 2*BYTES_FP+5
FOR_STACK2 := BYTES_FP+4 FOR_STACK2 := BYTES_FP+4
.ifndef MAX_EXPON
MAX_EXPON = 10 MAX_EXPON = 10
.endif
STACK := $0100 STACK := $0100
.ifndef STACK2
STACK2 := STACK STACK2 := STACK
.endif
.ifdef INPUTBUFFER
.if INPUTBUFFER >= $0100
CONFIG_NO_INPUTBUFFER_ZP := 1
.endif
.if INPUTBUFFER = $0200
CONFIG_INPUTBUFFER_0200 := 1
.endif
.endif
INPUTBUFFERX = INPUTBUFFER & $FF00 INPUTBUFFERX = INPUTBUFFER & $FF00
CR=13 CR=13
LF=10 LF=10
.ifndef CRLF_1
CRLF_1 := CR
CRLF_2 := LF
.endif
-27
View File
@@ -1,27 +0,0 @@
; configuration
CONFIG_2A := 1
CONFIG_DATAFLG := 1
CONFIG_EASTER_EGG := 1
CONFIG_NO_READ_Y_IS_ZERO_HACK := 1
CONFIG_PEEK_SAVE_LINNUM := 1
CONFIG_SCRTCH_ORDER := 2
; zero page -- CBM BASIC V2 layout
ZP_START1 = $02
ZP_START2 = $0C
ZP_START3 = $12
ZP_START4 = $1D
; input buffer
INPUTBUFFER := $0200
; extra/override ZP variables
USR := GORESTART ; XXX
; constants
SPACE_FOR_GOSUB := $3E
STACK_TOP := $FA
WIDTH := 80
WIDTH2 := 30
RAMSTART2 := $0400
-27
View File
@@ -1,32 +1,10 @@
init_error_table init_error_table
.ifdef CONFIG_SMALL_ERROR
define_error ERR_NOFOR, "NF"
define_error ERR_SYNTAX, "SN"
define_error ERR_NOGOSUB, "RG"
define_error ERR_NODATA, "OD"
define_error ERR_ILLQTY, "FC"
define_error ERR_OVERFLOW, "OV"
define_error ERR_MEMFULL, "OM"
define_error ERR_UNDEFSTAT, "US"
define_error ERR_BADSUBS, "BS"
define_error ERR_REDIMD, "DD"
define_error ERR_ZERODIV, "/0"
define_error ERR_ILLDIR, "ID"
define_error ERR_BADTYPE, "TM"
define_error ERR_STRLONG, "LS"
define_error ERR_FRMCPX, "ST"
define_error ERR_CANTCONT, "CN"
define_error ERR_UNDEFFN, "UF"
.else
define_error ERR_NOFOR, "NEXT WITHOUT FOR" define_error ERR_NOFOR, "NEXT WITHOUT FOR"
define_error ERR_SYNTAX, "SYNTAX" define_error ERR_SYNTAX, "SYNTAX"
define_error ERR_NOGOSUB, "RETURN WITHOUT GOSUB" define_error ERR_NOGOSUB, "RETURN WITHOUT GOSUB"
define_error ERR_NODATA, "OUT OF DATA" define_error ERR_NODATA, "OUT OF DATA"
define_error ERR_ILLQTY, "ILLEGAL QUANTITY" define_error ERR_ILLQTY, "ILLEGAL QUANTITY"
.ifdef CBM1
.byte 0,0,0,0,0
.endif
define_error ERR_OVERFLOW, "OVERFLOW" define_error ERR_OVERFLOW, "OVERFLOW"
define_error ERR_MEMFULL, "OUT OF MEMORY" define_error ERR_MEMFULL, "OUT OF MEMORY"
define_error ERR_UNDEFSTAT, "UNDEF'D STATEMENT" define_error ERR_UNDEFSTAT, "UNDEF'D STATEMENT"
@@ -37,13 +15,8 @@ define_error ERR_ILLDIR, "ILLEGAL DIRECT"
define_error ERR_BADTYPE, "TYPE MISMATCH" define_error ERR_BADTYPE, "TYPE MISMATCH"
define_error ERR_STRLONG, "STRING TOO LONG" define_error ERR_STRLONG, "STRING TOO LONG"
.ifdef CONFIG_FILE .ifdef CONFIG_FILE
.ifdef CBM1
define_error ERR_BADDATA, "BAD DATA"
.else
define_error ERR_BADDATA, "FILE DATA" define_error ERR_BADDATA, "FILE DATA"
.endif .endif
.endif
define_error ERR_FRMCPX, "FORMULA TOO COMPLEX" define_error ERR_FRMCPX, "FORMULA TOO COMPLEX"
define_error ERR_CANTCONT, "CAN'T CONTINUE" define_error ERR_CANTCONT, "CAN'T CONTINUE"
define_error ERR_UNDEFFN, "UNDEF'D FUNCTION" define_error ERR_UNDEFFN, "UNDEF'D FUNCTION"
.endif
-227
View File
@@ -19,31 +19,13 @@ GERR:
beq JERROR beq JERROR
NEXT3: NEXT3:
txs txs
.ifndef CONFIG_2
inx
inx
inx
inx
.endif
txa txa
.ifdef CONFIG_2
clc clc
adc #$04 adc #$04
pha pha
adc #BYTES_FP+1 adc #BYTES_FP+1
sta DEST sta DEST
pla pla
.else
inx
inx
inx
inx
inx
.ifndef CONFIG_SMALL
inx
.endif
stx DEST
.endif
ldy #>STACK ldy #>STACK
jsr LOAD_FAC_FROM_YA jsr LOAD_FAC_FROM_YA
tsx tsx
@@ -240,18 +222,12 @@ FRM_STACK2:
tay tay
pla pla
sta INDEX sta INDEX
.ifndef CONFIG_2B
inc INDEX ; bug: assumes not on page boundary
; bug exists on AppleSoft II
.endif
pla pla
sta INDEX+1 sta INDEX+1
.ifdef CONFIG_2B
inc INDEX inc INDEX
bne LEB69 bne LEB69
inc INDEX+1 inc INDEX+1
LEB69: LEB69:
.endif
tya tya
pha pha
@@ -261,10 +237,8 @@ LEB69:
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
FRM_STACK3: FRM_STACK3:
jsr ROUND_FAC jsr ROUND_FAC
.ifndef CONFIG_SMALL
lda FAC+4 lda FAC+4
pha pha
.endif
lda FAC+3 lda FAC+3
pha pha
lda FAC+2 lda FAC+2
@@ -307,10 +281,8 @@ FRM_PERFORM2:
pla pla
sta ARG+3 sta ARG+3
pla pla
.ifndef CONFIG_SMALL
sta ARG+4 sta ARG+4
pla pla
.endif
sta ARGSIGN sta ARGSIGN
eor FACSIGN eor FACSIGN
sta SGNCPR sta SGNCPR
@@ -335,17 +307,6 @@ L2D36:
L2D39: L2D39:
jsr ISLETC jsr ISLETC
bcs FRM_VARIABLE bcs FRM_VARIABLE
.ifdef CONFIG_CBM_ALL
cmp #$FF
bne LCDC1
lda #<CON_PI
ldy #>CON_PI
jsr LOAD_FAC_FROM_YA
jmp CHRGET
CON_PI:
.byte $82,$49,$0f,$DA,$A1
LCDC1:
.endif
cmp #$2E cmp #$2E
beq L2D36 beq L2D36
cmp #TOKEN_MINUS cmp #TOKEN_MINUS
@@ -394,16 +355,6 @@ EQUOP:
eor #$FF eor #$FF
jmp GIVAYF jmp GIVAYF
L2D74: L2D74:
.ifdef SYM1
cmp #TOKEN_USR
bne LCC8A
jmp LCDBD
LCC8A:
cmp #$26
bne LCC91
jmp LCDFE
LCC91:
.endif
cmp #TOKEN_FN cmp #TOKEN_FN
bne L2D7B bne L2D7B
jmp L31F3 jmp L31F3
@@ -452,49 +403,14 @@ FRM_VARIABLE:
FRM_VARIABLE_CALL = *-1 FRM_VARIABLE_CALL = *-1
sta FAC_LAST-1 sta FAC_LAST-1
sty FAC_LAST sty FAC_LAST
.ifdef CONFIG_CBM_ALL
lda VARNAM
ldy VARNAM+1
.endif
ldx VALTYP ldx VALTYP
beq L2DB1 beq L2DB1
.ifdef CONFIG_CBM_ALL
.ifdef CONFIG_CBM1_PATCHES
jmp PATCH2
clc
LCE3B:
.else
ldx #$00
stx STRNG1+1
bit FAC+4
bpl LCE53
cmp #$54 ; T
bne LCE53
.endif
cpy #$C9 ; I$
bne LCE53
jsr LCE76
sty EXPON
dey
sty STRNG2
ldy #$06
sty INDX
ldy #$24
jsr LDD3A
jmp LD353
LCE53:
.endif
.ifdef CONFIG_2
.ifndef CBM2
; bugfix? ; bugfix?
; fixed on AppleSoft II, not on any CBM ; fixed on AppleSoft II, not on any CBM
ldx #$00 ldx #$00
stx STRNG1+1 stx STRNG1+1
.endif
.endif
rts rts
L2DB1: L2DB1:
.ifndef CONFIG_SMALL
ldx VALTYP+1 ldx VALTYP+1
bpl L2DC2 bpl L2DC2
ldy #$00 ldy #$00
@@ -506,57 +422,7 @@ L2DB1:
txa txa
jmp GIVAYF jmp GIVAYF
L2DC2: L2DC2:
.endif
.ifdef CONFIG_CBM1_PATCHES
jmp PATCH3
.byte $19
.endif
.ifdef CBM2
bit FAC+4
bpl LCE90
cmp #$54
bne LCE82
.endif
.ifndef CONFIG_CBM_ALL
jmp LOAD_FAC_FROM_YA jmp LOAD_FAC_FROM_YA
.endif
.ifdef CONFIG_CBM_ALL
LCE69:
cpy #$49
.ifdef CBM1
bne LCE82
.else
bne LCE90
.endif
jsr LCE76
tya
ldx #$A0
jmp LDB21
LCE76:
.ifdef CBM1
lda #$FE
ldy #$01
.else
lda #$8B
ldy #$00
.endif
sei
jsr LOAD_FAC_FROM_YA
cli
sty FAC+1
rts
LCE82:
cmp #$53
bne LCE90
cpy #$54
bne LCE90
lda Z96
jmp FLOAT
LCE90:
lda FAC+3
ldy FAC+4
jmp LOAD_FAC_FROM_YA
.endif
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
UNARY: UNARY:
@@ -593,11 +459,7 @@ L2DF4:
sta JMPADRS+1 sta JMPADRS+1
lda UNFNC-TOKEN_SGN-TOKEN_SGN+$101,y lda UNFNC-TOKEN_SGN-TOKEN_SGN+$101,y
sta JMPADRS+2 sta JMPADRS+2
.ifdef KBD
jsr LF47D
.else
jsr JMPADRS jsr JMPADRS
.endif
jmp CHKNUM jmp CHKNUM
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
@@ -697,92 +559,3 @@ CMPDONE:
lda #$FF lda #$FF
L2E99: L2E99:
jmp FLOAT jmp FLOAT
.ifdef SYM1
LCDBD:
jsr CHRGET
jsr CHKOPN
jsr FRMEVL
jsr CHRGOT
cmp #$29
beq LCDF1
jsr AYINT
lda FAC+4
ldy FAC+3
sta USR+1
sty USR+2
LCDD8:
jsr CHKCOM
jsr FRMEVL
jsr CHRGOT
cmp #$29
beq LCDF1
jsr AYINT
lda FAC+3
pha
lda FAC+4
pha
jmp LCDD8
LCDF1:
jsr CHRGET
jsr AYINT
lda FAC+3
ldy FAC+4
jmp USR
LCDFE:
lda ZD4
pha
lda ZD3
pha
jsr CHRGET
cmp #$22
bne LCE49
jsr CHRGET
jsr LCE2B
tax
jsr CHRGOT
jsr LCE2B
pha
jsr CHRGOT
cmp #$22
bne LCE48
jsr CHRGET
pla
tay
pla
pla
txa
jmp GIVAYF
LCE2B:
jsr ASCNIB
bcs LCE47
pha
jsr CHRGET
jsr ASCNIB
sta FAC+4
bcs LCE46
jsr CHRGET
pla
asl a
asl a
asl a
asl a
ora FAC+4
rts
LCE46:
pla
LCE47:
pla
LCE48:
pla
LCE49:
pla
sta ZD3
pla
sta ZD4
jmp ZERO_FAC
.endif
+26 -29
View File
@@ -1,38 +1,35 @@
.segment "EXTRA" .segment "EXTRA"
.ifdef KIM LOAD:
.include "kim_extra.s" rts
.endif
.ifdef CONFIG_CBM1_PATCHES SAVE:
.include "cbm1_patches.s" rts
.endif
.ifdef KBD ISCNTC:
.include "kbd_extra.s" lda $BC01
.endif cmp #$03
beq @break
rts
@break:
jmp STOP
.ifdef APPLE MONRDKEY:
.include "apple_extra.s" lda $BC01
.endif bmi @skipped
sta $BC00 ; echo
@skipped:
rts
.ifdef MICROTAN MONCOUT:
.include "microtan_extra.s" sta $BC00
.endif
.ifdef AIM65 rts
.include "aim65_extra.s"
.endif
.ifdef SYM1 .segment "WOZMON"
.byte 0,0,0
.endif
.ifdef W65C816SXB
.include "w65c816sxb_extra.s"
.endif
.ifdef KILIAN
.include "kilian_extra.s"
.include "wozmon.s" .include "wozmon.s"
.endif
.segment "RESETVEC"
.word $0000 ; NMI vector
.word RESET ; RESET vector
.word $0000 ; IRQ vector
-319
View File
@@ -31,7 +31,6 @@ FSUBT:
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; Commodore BASIC V2 Easter Egg ; Commodore BASIC V2 Easter Egg
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
.ifdef CONFIG_EASTER_EGG
EASTER_EGG: EASTER_EGG:
lda LINNUM lda LINNUM
cmp #<6502 cmp #<6502
@@ -58,7 +57,6 @@ LD766:
dec FORPNT dec FORPNT
bne LD758 bne LD758
rts rts
.endif
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; SHIFT SMALLER ARGUMENT MORE THAN 7 BITS ; SHIFT SMALLER ARGUMENT MORE THAN 7 BITS
@@ -86,11 +84,7 @@ L365B:
lda ARG lda ARG
FADD2: FADD2:
tay tay
.ifdef KBD
beq RTS4
.else
beq RTS3 beq RTS3
.endif
sec sec
sbc FAC sbc FAC
beq FADD3 beq FADD3
@@ -126,11 +120,9 @@ L369B:
eor #$FF eor #$FF
adc ARGEXTENSION adc ARGEXTENSION
sta FACEXTENSION sta FACEXTENSION
.ifndef CONFIG_SMALL
lda 4,y lda 4,y
sbc 4,x sbc 4,x
sta FAC+4 sta FAC+4
.endif
lda 3,y lda 3,y
sbc 3,x sbc 3,x
sta FAC+3 sta FAC+3
@@ -158,24 +150,13 @@ L36C7:
stx FAC+1 stx FAC+1
ldx FAC+3 ldx FAC+3
stx FAC+2 stx FAC+2
.ifdef CONFIG_SMALL
ldx FACEXTENSION
stx FAC+3
.else
ldx FAC+4 ldx FAC+4
stx FAC+3 stx FAC+3
ldx FACEXTENSION ldx FACEXTENSION
stx FAC+4 stx FAC+4
.endif
sty FACEXTENSION sty FACEXTENSION
adc #$08 adc #$08
.ifdef CONFIG_2B
; bugfix?
; fix does not exist on AppleSoft 2
cmp #(MANTISSA_BYTES+1)*8 cmp #(MANTISSA_BYTES+1)*8
.else
cmp #MANTISSA_BYTES*8
.endif
bne L36C7 bne L36C7
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
@@ -196,11 +177,9 @@ STA_IN_FAC_SIGN:
FADD4: FADD4:
adc ARGEXTENSION adc ARGEXTENSION
sta FACEXTENSION sta FACEXTENSION
.ifndef CONFIG_SMALL
lda FAC+4 lda FAC+4
adc ARG+4 adc ARG+4
sta FAC+4 sta FAC+4
.endif
lda FAC+3 lda FAC+3
adc ARG+3 adc ARG+3
sta FAC+3 sta FAC+3
@@ -218,9 +197,7 @@ FADD4:
NORMALIZE_FAC3: NORMALIZE_FAC3:
adc #$01 adc #$01
asl FACEXTENSION asl FACEXTENSION
.ifndef CONFIG_SMALL
rol FAC+4 rol FAC+4
.endif
rol FAC+3 rol FAC+3
rol FAC+2 rol FAC+2
rol FAC+1 rol FAC+1
@@ -237,51 +214,11 @@ NORMALIZE_FAC5:
NORMALIZE_FAC6: NORMALIZE_FAC6:
inc FAC inc FAC
beq OVERFLOW beq OVERFLOW
.ifndef CONFIG_ROR_WORKAROUND
ror FAC+1 ror FAC+1
ror FAC+2 ror FAC+2
ror FAC+3 ror FAC+3
.ifndef CONFIG_SMALL
ror FAC+4 ror FAC+4
.endif
ror FACEXTENSION ror FACEXTENSION
.else
lda #$00
bcc L372E
lda #$80
L372E:
lsr FAC+1
ora FAC+1
sta FAC+1
lda #$00
bcc L373A
lda #$80
L373A:
lsr FAC+2
ora FAC+2
sta FAC+2
lda #$00
bcc L3746
lda #$80
L3746:
lsr FAC+3
ora FAC+3
sta FAC+3
lda #$00
bcc L3752
lda #$80
L3752:
lsr FAC+4
ora FAC+4
sta FAC+4
lda #$00
bcc L375E
lda #$80
L375E:
lsr FACEXTENSION
ora FACEXTENSION
sta FACEXTENSION
.endif
L3764: L3764:
rts rts
@@ -306,11 +243,9 @@ COMPLEMENT_FAC_MANTISSA:
lda FAC+3 lda FAC+3
eor #$FF eor #$FF
sta FAC+3 sta FAC+3
.ifndef CONFIG_SMALL
lda FAC+4 lda FAC+4
eor #$FF eor #$FF
sta FAC+4 sta FAC+4
.endif
lda FACEXTENSION lda FACEXTENSION
eor #$FF eor #$FF
sta FACEXTENSION sta FACEXTENSION
@@ -321,10 +256,8 @@ COMPLEMENT_FAC_MANTISSA:
; INCREMENT FAC MANTISSA ; INCREMENT FAC MANTISSA
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
INCREMENT_FAC_MANTISSA: INCREMENT_FAC_MANTISSA:
.ifndef CONFIG_SMALL
inc FAC+4 inc FAC+4
bne RTS12 bne RTS12
.endif
inc FAC+3 inc FAC+3
bne RTS12 bne RTS12
inc FAC+2 inc FAC+2
@@ -346,16 +279,10 @@ OVERFLOW:
SHIFT_RIGHT1: SHIFT_RIGHT1:
ldx #RESULT-1 ldx #RESULT-1
SHIFT_RIGHT2: SHIFT_RIGHT2:
.ifdef CONFIG_SMALL
ldy 3,x
.else
ldy 4,x ldy 4,x
.endif
sty FACEXTENSION sty FACEXTENSION
.ifndef CONFIG_SMALL
ldy 3,x ldy 3,x
sty 4,x sty 4,x
.endif
ldy 2,x ldy 2,x
sty 3,x sty 3,x
ldy 1,x ldy 1,x
@@ -374,7 +301,6 @@ SHIFT_RIGHT:
tay tay
lda FACEXTENSION lda FACEXTENSION
bcs SHIFT_RIGHT5 bcs SHIFT_RIGHT5
.ifndef CONFIG_ROR_WORKAROUND
LB588: LB588:
asl 1,x asl 1,x
bcc LB58E bcc LB58E
@@ -389,76 +315,15 @@ LB58E:
SHIFT_RIGHT4: SHIFT_RIGHT4:
ror 2,x ror 2,x
ror 3,x ror 3,x
.ifndef CONFIG_SMALL
ror 4,x ror 4,x
.endif
ror a ror a
iny iny
bne LB588 bne LB588
.else
L37C4:
pha
lda 1,x
and #$80
lsr 1,x
ora 1,x
sta 1,x
.byte $24
SHIFT_RIGHT4:
pha
lda #$00
bcc L37D7
lda #$80
L37D7:
lsr 2,x
ora 2,x
sta 2,x
lda #$00
bcc L37E3
lda #$80
L37E3:
lsr 3,x
ora 3,x
sta 3,x
lda #$00
bcc L37EF
lda #$80
L37EF:
lsr 4,x
ora 4,x
sta 4,x
pla
php
lsr a
plp
bcc L37FD
ora #$80
L37FD:
iny
bne L37C4
.endif
SHIFT_RIGHT5: SHIFT_RIGHT5:
clc clc
rts rts
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
.ifdef CONFIG_SMALL
CON_ONE:
.byte $81,$00,$00,$00
POLY_LOG:
.byte $02
.byte $80,$19,$56,$62
.byte $80,$76,$22,$F3
.byte $82,$38,$AA,$40
CON_SQR_HALF:
.byte $80,$35,$04,$F3
CON_SQR_TWO:
.byte $81,$35,$04,$F3
CON_NEG_HALF:
.byte $80,$80,$00,$00
CON_LOG_TWO:
.byte $80,$31,$72,$18
.else
CON_ONE: CON_ONE:
.byte $81,$00,$00,$00,$00 .byte $81,$00,$00,$00,$00
POLY_LOG: POLY_LOG:
@@ -475,7 +340,6 @@ CON_NEG_HALF:
.byte $80,$80,$00,$00,$00 .byte $80,$80,$00,$00,$00
CON_LOG_TWO: CON_LOG_TWO:
.byte $80,$31,$72,$17,$F8 .byte $80,$31,$72,$17,$F8
.endif
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; "LOG" FUNCTION ; "LOG" FUNCTION
@@ -522,25 +386,17 @@ FMULT:
; FAC = ARG * FAC ; FAC = ARG * FAC
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
FMULTT: FMULTT:
.ifndef CONFIG_11
beq L3903
.else
jeq L3903 jeq L3903
.endif
jsr ADD_EXPONENTS jsr ADD_EXPONENTS
lda #$00 lda #$00
sta RESULT sta RESULT
sta RESULT+1 sta RESULT+1
sta RESULT+2 sta RESULT+2
.ifndef CONFIG_SMALL
sta RESULT+3 sta RESULT+3
.endif
lda FACEXTENSION lda FACEXTENSION
jsr MULTIPLY1 jsr MULTIPLY1
.ifndef CONFIG_SMALL
lda FAC+4 lda FAC+4
jsr MULTIPLY1 jsr MULTIPLY1
.endif
lda FAC+3 lda FAC+3
jsr MULTIPLY1 jsr MULTIPLY1
lda FAC+2 lda FAC+2
@@ -562,11 +418,9 @@ L38A7:
tay tay
bcc L38C3 bcc L38C3
clc clc
.ifndef CONFIG_SMALL
lda RESULT+3 lda RESULT+3
adc ARG+4 adc ARG+4
sta RESULT+3 sta RESULT+3
.endif
lda RESULT+2 lda RESULT+2
adc ARG+3 adc ARG+3
sta RESULT+2 sta RESULT+2
@@ -577,56 +431,11 @@ L38A7:
adc ARG+1 adc ARG+1
sta RESULT sta RESULT
L38C3: L38C3:
.ifndef CONFIG_ROR_WORKAROUND
ror RESULT ror RESULT
ror RESULT+1 ror RESULT+1
.ifdef APPLE_BAD_BYTE
; this seems to be a bad byte in the dump
.byte RESULT+2,RESULT+2 ; XXX BUG!
.else
ror RESULT+2 ror RESULT+2
.endif
.ifndef CONFIG_SMALL
ror RESULT+3 ror RESULT+3
.endif
ror FACEXTENSION ror FACEXTENSION
.else
lda #$00
bcc L38C9
lda #$80
L38C9:
lsr RESULT
ora RESULT
sta RESULT
lda #$00
bcc L38D5
lda #$80
L38D5:
lsr RESULT+1
ora RESULT+1
sta RESULT+1
lda #$00
bcc L38E1
lda #$80
L38E1:
lsr RESULT+2
ora RESULT+2
sta RESULT+2
lda #$00
bcc L38ED
lda #$80
L38ED:
lsr RESULT+3
ora RESULT+3
sta RESULT+3
lda #$00
bcc L38F9
lda #$80
L38F9:
lsr FACEXTENSION
ora FACEXTENSION
sta FACEXTENSION
.endif
tya tya
lsr a lsr a
bne L38A7 bne L38A7
@@ -640,11 +449,9 @@ LOAD_ARG_FROM_YA:
sta INDEX sta INDEX
sty INDEX+1 sty INDEX+1
ldy #BYTES_FP-1 ldy #BYTES_FP-1
.ifndef CONFIG_SMALL
lda (INDEX),y lda (INDEX),y
sta ARG+4 sta ARG+4
dey dey
.endif
lda (INDEX),y lda (INDEX),y
sta ARG+3 sta ARG+3
dey dey
@@ -732,11 +539,7 @@ L3970:
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
CONTEN: CONTEN:
.ifdef CONFIG_SMALL
.byte $84,$20,$00,$00
.else
.byte $84,$20,$00,$00,$00 .byte $84,$20,$00,$00,$00
.endif
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; DIVIDE FAC BY 10 ; DIVIDE FAC BY 10
@@ -785,11 +588,9 @@ L39A1:
bne L39B7 bne L39B7
ldy ARG+3 ldy ARG+3
cpy FAC+3 cpy FAC+3
.ifndef CONFIG_SMALL
bne L39B7 bne L39B7
ldy ARG+4 ldy ARG+4
cpy FAC+4 cpy FAC+4
.endif
L39B7: L39B7:
php php
rol a rol a
@@ -804,9 +605,7 @@ L39C4:
bcs L39D5 bcs L39D5
L39C7: L39C7:
asl ARG_LAST asl ARG_LAST
.ifndef CONFIG_SMALL
rol ARG+3 rol ARG+3
.endif
rol ARG+2 rol ARG+2
rol ARG+1 rol ARG+1
bcs L39B7 bcs L39B7
@@ -814,11 +613,9 @@ L39C7:
bpl L39B7 bpl L39B7
L39D5: L39D5:
tay tay
.ifndef CONFIG_SMALL
lda ARG+4 lda ARG+4
sbc FAC+4 sbc FAC+4
sta ARG+4 sta ARG+4
.endif
lda ARG+3 lda ARG+3
sbc FAC+3 sbc FAC+3
sta ARG+3 sta ARG+3
@@ -857,10 +654,8 @@ COPY_RESULT_INTO_FAC:
sta FAC+2 sta FAC+2
lda RESULT+2 lda RESULT+2
sta FAC+3 sta FAC+3
.ifndef CONFIG_SMALL
lda RESULT+3 lda RESULT+3
sta FAC+4 sta FAC+4
.endif
jmp NORMALIZE_FAC2 jmp NORMALIZE_FAC2
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
@@ -870,11 +665,9 @@ LOAD_FAC_FROM_YA:
sta INDEX sta INDEX
sty INDEX+1 sty INDEX+1
ldy #MANTISSA_BYTES ldy #MANTISSA_BYTES
.ifndef CONFIG_SMALL
lda (INDEX),y lda (INDEX),y
sta FAC+4 sta FAC+4
dey dey
.endif
lda (INDEX),y lda (INDEX),y
sta FAC+3 sta FAC+3
dey dey
@@ -921,11 +714,9 @@ STORE_FAC_AT_YX_ROUNDED:
stx INDEX stx INDEX
sty INDEX+1 sty INDEX+1
ldy #MANTISSA_BYTES ldy #MANTISSA_BYTES
.ifndef CONFIG_SMALL
lda FAC+4 lda FAC+4
sta (INDEX),y sta (INDEX),y
dey dey
.endif
lda FAC+3 lda FAC+3
sta (INDEX),y sta (INDEX),y
dey dey
@@ -1043,9 +834,7 @@ FLOAT1:
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
FLOAT2: FLOAT2:
lda #$00 lda #$00
.ifndef CONFIG_SMALL
sta FAC+4 sta FAC+4
.endif
sta FAC+3 sta FAC+3
LDB21: LDB21:
stx FAC stx FAC
@@ -1092,12 +881,10 @@ FCOMP2:
cmp FAC+2 cmp FAC+2
bne L3B0A bne L3B0A
iny iny
.ifndef CONFIG_SMALL
lda (DEST),y lda (DEST),y
cmp FAC+3 cmp FAC+3
bne L3B0A bne L3B0A
iny iny
.endif
lda #$7F lda #$7F
cmp FACEXTENSION cmp FACEXTENSION
lda (DEST),y lda (DEST),y
@@ -1175,9 +962,7 @@ QINT3:
sta FAC+1 sta FAC+1
sta FAC+2 sta FAC+2
sta FAC+3 sta FAC+3
.ifndef CONFIG_SMALL
sta FAC+4 sta FAC+4
.endif
tay tay
RTS17: RTS17:
rts rts
@@ -1197,12 +982,6 @@ L3B6F:
dex dex
bpl L3B6F bpl L3B6F
bcc FIN2 bcc FIN2
.ifdef SYM1
cmp #$26
bne LDABB
jmp LCDFE
LDABB:
.endif
cmp #$2D cmp #$2D
bne L3B7E bne L3B7E
stx SERLEN stx SERLEN
@@ -1231,17 +1010,7 @@ FIN3:
beq FIN4 beq FIN4
bne FIN6 bne FIN6
L3BA6: L3BA6:
.ifndef CONFIG_ROR_WORKAROUND
ror EXPSGN ror EXPSGN
.else
lda #$00
bcc L3BAC
lda #$80
L3BAC:
lsr EXPSGN
ora EXPSGN
sta EXPSGN
.endif
FIN4: FIN4:
jsr CHRGET jsr CHRGET
FIN5: FIN5:
@@ -1258,17 +1027,7 @@ FIN6:
; FOUND A DECIMAL POINT ; FOUND A DECIMAL POINT
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
FIN10: FIN10:
.ifndef CONFIG_ROR_WORKAROUND
ror LOWTR ror LOWTR
.else
lda #$00
bcc L3BC9
lda #$80
L3BC9:
lsr LOWTR
ora LOWTR
sta LOWTR
.endif
bit LOWTR bit LOWTR
bvc FIN1 bvc FIN1
@@ -1336,20 +1095,11 @@ GETEXP:
lda EXPON lda EXPON
cmp #MAX_EXPON cmp #MAX_EXPON
bcc L3C2C bcc L3C2C
.ifdef CONFIG_10A
lda #$64 lda #$64
.endif
bit EXPSGN bit EXPSGN
.ifdef CONFIG_10A
bmi L3C3A bmi L3C3A
.else
bmi LDC70
.endif
jmp OVERFLOW jmp OVERFLOW
LDC70: LDC70:
.ifndef CONFIG_10A
lda #$0B
.endif
L3C2C: L3C2C:
asl a asl a
asl a asl a
@@ -1366,40 +1116,20 @@ L3C3A:
jmp FIN4 jmp FIN4
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
.ifdef CONFIG_SMALL
; these values are /1000 of what the labels say
CON_99999999_9:
.byte $91,$43,$4F,$F8
CON_999999999:
.byte $94,$74,$23,$F7
CON_BILLION:
.byte $94,$74,$24,$00
.else
CON_99999999_9: CON_99999999_9:
.byte $9B,$3E,$BC,$1F,$FD .byte $9B,$3E,$BC,$1F,$FD
CON_999999999: CON_999999999:
.ifndef CONFIG_10A
.byte $9E,$6E,$6B,$27,$FE
.else
.byte $9E,$6E,$6B,$27,$FD .byte $9E,$6E,$6B,$27,$FD
.endif
CON_BILLION: CON_BILLION:
.byte $9E,$6E,$6B,$28,$00 .byte $9E,$6E,$6B,$28,$00
.endif
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; PRINT "IN <LINE #>" ; PRINT "IN <LINE #>"
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
INPRT: INPRT:
.ifdef KBD
jsr LFE0B
.byte " in"
.byte 0
.else
lda #<QT_IN lda #<QT_IN
ldy #>QT_IN ldy #>QT_IN
jsr GOSTROUT2 jsr GOSTROUT2
.endif
lda CURLIN+1 lda CURLIN+1
ldx CURLIN ldx CURLIN
@@ -1451,11 +1181,7 @@ L3C8C:
lda #<CON_BILLION lda #<CON_BILLION
ldy #>CON_BILLION ldy #>CON_BILLION
jsr FMULT jsr FMULT
.ifdef CONFIG_SMALL
lda #<-6 ; exponent adjustment
.else
lda #<-9 lda #<-9
.endif
L3C95: L3C95:
sta INDX sta INDX
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
@@ -1533,11 +1259,9 @@ LDD3A:
L3CF6: L3CF6:
lda FAC_LAST lda FAC_LAST
clc clc
.ifndef CONFIG_SMALL
adc DECTBL+3,y adc DECTBL+3,y
sta FAC+4 sta FAC+4
lda FAC+3 lda FAC+3
.endif
adc DECTBL+2,y adc DECTBL+2,y
sta FAC+3 sta FAC+3
lda FAC+2 lda FAC+2
@@ -1562,9 +1286,7 @@ L3D23:
iny iny
iny iny
iny iny
.ifndef CONFIG_SMALL
iny iny
.endif
sty VARPNT sty VARPNT
ldy STRNG2 ldy STRNG2
iny iny
@@ -1584,10 +1306,6 @@ L3D3E:
and #$80 and #$80
tax tax
cpy #DECTBL_END-DECTBL cpy #DECTBL_END-DECTBL
.ifdef CONFIG_CBM_ALL
beq LDD96
cpy #$3C ; XXX
.endif
bne L3CF6 bne L3CF6
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; NINE DIGITS HAVE BEEN STORED IN STRING. NOW LOOK ; NINE DIGITS HAVE BEEN STORED IN STRING. NOW LOOK
@@ -1644,25 +1362,13 @@ L3D94:
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
CON_HALF: CON_HALF:
.ifdef CONFIG_SMALL
.byte $80,$00,$00,$00
.else
.byte $80,$00,$00,$00,$00 .byte $80,$00,$00,$00,$00
.endif
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; POWERS OF 10 FROM 1E8 DOWN TO 1, ; POWERS OF 10 FROM 1E8 DOWN TO 1,
; AS 32-BIT INTEGERS, WITH ALTERNATING SIGNS ; AS 32-BIT INTEGERS, WITH ALTERNATING SIGNS
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
DECTBL: DECTBL:
.ifdef CONFIG_SMALL
.byte $FE,$79,$60 ; -100000
.byte $00,$27,$10 ; 10000
.byte $FF,$FC,$18 ; -1000
.byte $00,$00,$64 ; 100
.byte $FF,$FF,$F6 ; -10
.byte $00,$00,$01 ; 1
.else
.byte $FA,$0A,$1F,$00 ; -100000000 .byte $FA,$0A,$1F,$00 ; -100000000
.byte $00,$98,$96,$80 ; 10000000 .byte $00,$98,$96,$80 ; 10000000
.byte $FF,$F0,$BD,$C0 ; -1000000 .byte $FF,$F0,$BD,$C0 ; -1000000
@@ -1672,19 +1378,8 @@ DECTBL:
.byte $FF,$FF,$FF,$9C ; -100 .byte $FF,$FF,$FF,$9C ; -100
.byte $00,$00,$00,$0A ; 10 .byte $00,$00,$00,$0A ; 10
.byte $FF,$FF,$FF,$FF ; -1 .byte $FF,$FF,$FF,$FF ; -1
.endif
DECTBL_END: DECTBL_END:
.ifdef CONFIG_CBM_ALL
.byte $FF,$DF,$0A,$80 ; TI$
.byte $00,$03,$4B,$C0
.byte $FF,$FF,$73,$60
.byte $00,$00,$0E,$10
.byte $FF,$FF,$FD,$A8
.byte $00,$00,$00,$3C
.endif
.ifdef CONFIG_2
C_ZERO = CON_HALF + 2 C_ZERO = CON_HALF + 2
.endif
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; "SQR" FUNCTION ; "SQR" FUNCTION
@@ -1744,19 +1439,6 @@ L3E0F:
rts rts
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
.ifdef CONFIG_SMALL
CON_LOG_E:
.byte $81,$38,$AA,$3B
POLY_EXP:
.byte $06
.byte $74,$63,$90,$8C
.byte $77,$23,$0C,$AB
.byte $7A,$1E,$94,$00
.byte $7C,$63,$42,$80
.byte $7E,$75,$FE,$D0
.byte $80,$31,$72,$15
.byte $81,$00,$00,$00
.else
CON_LOG_E: CON_LOG_E:
.byte $81,$38,$AA,$3B,$29 .byte $81,$38,$AA,$3B,$29
POLY_EXP: POLY_EXP:
@@ -1769,7 +1451,6 @@ POLY_EXP:
.byte $7E,$75,$FD,$E7,$C6 .byte $7E,$75,$FD,$E7,$C6
.byte $80,$31,$72,$18,$10 .byte $80,$31,$72,$18,$10
.byte $81,$00,$00,$00,$00 .byte $81,$00,$00,$00,$00
.endif
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; "EXP" FUNCTION ; "EXP" FUNCTION
-95
View File
@@ -82,41 +82,19 @@ NEWSTT:
jsr ISCNTC jsr ISCNTC
lda TXTPTR lda TXTPTR
ldy TXTPTR+1 ldy TXTPTR+1
.if .def(CONFIG_NO_INPUTBUFFER_ZP) && .def(CONFIG_2)
cpy #>INPUTBUFFER cpy #>INPUTBUFFER
.ifdef CBM2
nop
.endif
beq LC6D4 beq LC6D4
.else
; BUG on AppleSoft I,
; fixed differently on AppleSoft II (ldx/inx)
beq L2683
.endif
sta OLDTEXT sta OLDTEXT
sty OLDTEXT+1 sty OLDTEXT+1
LC6D4: LC6D4:
ldy #$00 ldy #$00
L2683: L2683:
lda (TXTPTR),y lda (TXTPTR),y
.ifndef CONFIG_11
beq LA5DC ; old: 1 cycle more on generic case
cmp #$3A
beq NEWSTT2
SYNERR1:
jmp SYNERR
LA5DC:
.else
bne COLON; new: 1 cycle more on ":" case bne COLON; new: 1 cycle more on ":" case
.endif
ldy #$02 ldy #$02
lda (TXTPTR),y lda (TXTPTR),y
clc clc
.ifdef CONFIG_2
jeq L2701 jeq L2701
.else
beq L2701
.endif
iny iny
lda (TXTPTR),y lda (TXTPTR),y
sta CURLIN sta CURLIN
@@ -140,27 +118,12 @@ NEWSTT2:
; CARRY IS SET ; CARRY IS SET
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
EXECUTE_STATEMENT: EXECUTE_STATEMENT:
.ifndef CONFIG_11A
beq RET1
.else
beq RET2 beq RET2
.endif
.ifndef CONFIG_11
sec
.endif
EXECUTE_STATEMENT1: EXECUTE_STATEMENT1:
sbc #$80 sbc #$80
.ifndef CONFIG_11
jcc LET ; old: 1 cycle more on instr.
.else
bcc LET1; new: 1 cycle more on assignment bcc LET1; new: 1 cycle more on assignment
.endif
cmp #NUM_TOKENS cmp #NUM_TOKENS
.ifdef CONFIG_2
bcs LC721 bcs LC721
.else
bcs SYNERR1
.endif
asl a asl a
tay tay
lda TOKEN_ADDRESS_TABLE+1,y lda TOKEN_ADDRESS_TABLE+1,y
@@ -169,7 +132,6 @@ EXECUTE_STATEMENT1:
pha pha
jmp CHRGET jmp CHRGET
.ifdef CONFIG_11
LET1: LET1:
jmp LET jmp LET
@@ -178,9 +140,7 @@ COLON:
beq NEWSTT2 beq NEWSTT2
SYNERR1: SYNERR1:
jmp SYNERR jmp SYNERR
.endif
.ifdef CONFIG_2; GO TO
LC721: LC721:
cmp #TOKEN_GO-$80 cmp #TOKEN_GO-$80
bne SYNERR1 bne SYNERR1
@@ -188,7 +148,6 @@ LC721:
lda #TOKEN_TO lda #TOKEN_TO
jsr SYNCHR jsr SYNCHR
jmp GOTO jmp GOTO
.endif
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; "RESTORE" STATEMENT ; "RESTORE" STATEMENT
@@ -223,13 +182,11 @@ END2:
bne RET1 bne RET1
lda TXTPTR lda TXTPTR
ldy TXTPTR+1 ldy TXTPTR+1
.if .def(CONFIG_NO_INPUTBUFFER_ZP) && .def(CONFIG_2)
; BUG on AppleSoft I ; BUG on AppleSoft I
; fix exists on AppleSoft II ; fix exists on AppleSoft II
; TXTPTR+1 will always be > 0 ; TXTPTR+1 will always be > 0
ldx CURLIN+1 ldx CURLIN+1
inx inx
.endif
beq END4 beq END4
sta OLDTEXT sta OLDTEXT
sty OLDTEXT+1 sty OLDTEXT+1
@@ -244,19 +201,12 @@ END4:
L2701: L2701:
lda #<QT_BREAK lda #<QT_BREAK
ldy #>QT_BREAK ldy #>QT_BREAK
.ifndef KBD
ldx #$00 ldx #$00
stx Z14 stx Z14
.endif
bcc L270E bcc L270E
jmp PRINT_ERROR_LINNUM jmp PRINT_ERROR_LINNUM
L270E: L270E:
jmp RESTART jmp RESTART
.ifdef KBD
LE664:
tay
jmp SNGFLT
.endif
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; "CONT" COMMAND ; "CONT" COMMAND
@@ -277,48 +227,3 @@ L271C:
sty CURLIN+1 sty CURLIN+1
RET1: RET1:
rts rts
.ifdef KBD
PRT:
jsr GETBYT
txa
; not ROR bug safe
ror a
ror a
ror a
sta $8F
rts
LE68C:
ldy #$12
LE68E:
lda LEA30,y
sta $03A2,y
dey
bpl LE68E
rts
.endif
.ifndef AIM65
.if .def(CONFIG_NULL) || .def(CONFIG_PRINTNULLS)
; CBM1 has the keyword removed,
; but the code is still here
NULL:
jsr GETBYT
bne RET1
inx
cpx #NULL_MAX
bcs L2739
dex
stx Z15
L2738:
rts
L2739:
jmp IQERR
.endif
.ifndef CONFIG_11A
CLEAR:
bne RET1
jmp CLEARC
.endif
.endif
-14
View File
@@ -57,13 +57,8 @@ L2809:
lda TXTTAB lda TXTTAB
ldx TXTTAB+1 ldx TXTTAB+1
L280D: L280D:
.ifdef KBD
jsr LF457
bne UNDERR
.else
jsr FL1 jsr FL1
bcc UNDERR bcc UNDERR
.endif
lda LOWTRX lda LOWTRX
sbc #$01 sbc #$01
sta TXTPTR sta TXTPTR
@@ -79,11 +74,7 @@ L281E:
POP: POP:
bne L281E bne L281E
lda #$FF lda #$FF
.ifdef CONFIG_2A
sta FORPNT+1 ; bugfix, wrong in AppleSoft II sta FORPNT+1 ; bugfix, wrong in AppleSoft II
.else
sta FORPNT
.endif
jsr GTFORPNT jsr GTFORPNT
txs txs
cmp #TOKEN_GOSUB cmp #TOKEN_GOSUB
@@ -151,13 +142,8 @@ L2866:
beq L2852 beq L2852
iny iny
cmp #$22 cmp #$22
.ifndef CONFIG_11
beq L285E; old: swap & cont is faster
bne L2866
.else
bne L2866; new: cont is faster bne L2866; new: cont is faster
beq L285E beq L285E
.endif
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; "IF" STATEMENT ; "IF" STATEMENT
+1 -31
View File
@@ -1,33 +1,3 @@
.segment "HEADER" .segment "HEADER"
.ifdef W65C816SXB
; Disable emulation mode (is left on from the monitor)
.setcpu "65816"
SEC ;set carry for emulation mode
XCE ;go into emulation mode
.setcpu "65C02"
jsr INITUSBSERIAL
; Add a small delay to allow monitor to connect the terminal after ; Empty
; starting execution
ldy #0
ldx #0
@loop:
dex
bne @loop
dey
bne @loop
jmp COLD_START
.endif
.ifdef KBD
jmp LE68C
.byte $00,$13,$56
.endif
.ifdef AIM65
jmp COLD_START
jmp RESTART
.word AYINT,GIVAYF
.endif
.ifdef SYM1
jmp PR_WRITTEN_BY
.endif
+2 -341
View File
@@ -1,56 +1,20 @@
.segment "INIT" .segment "INIT"
.ifdef KBD
FNDLIN2:
php
jmp FNDLIN
.endif
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
PR_WRITTEN_BY: PR_WRITTEN_BY:
.ifndef KBD
.ifndef CONFIG_CBM_ALL
.ifndef AIM65
.ifndef SYM1
lda #<QT_WRITTEN_BY lda #<QT_WRITTEN_BY
ldy #>QT_WRITTEN_BY ldy #>QT_WRITTEN_BY
jsr STROUT jsr STROUT
.endif
.endif
.endif
.endif
COLD_START: COLD_START:
.ifdef SYM1
jsr ACCESS
.endif
.ifdef KBD
lda #<LFD81
sta $03A0
lda #>LFD81
sta $03A1
lda #$20
sta $0480
lda $0352
sta $04
lda $0353
sta $05
.else
.ifndef CBM2
ldx #$FF ldx #$FF
stx CURLIN+1 stx CURLIN+1
.endif
.ifdef CONFIG_NO_INPUTBUFFER_ZP
ldx #$FB ldx #$FB
.elseif .def(AIM65)
ldx #$FE
.endif
txs txs
.ifndef CONFIG_CBM_ALL
lda #<COLD_START lda #<COLD_START
ldy #>COLD_START ldy #>COLD_START
sta GORESTART+1 sta GORESTART+1
sty GORESTART+2 sty GORESTART+2
.ifndef AIM65
sta GOSTROUT+1 sta GOSTROUT+1
sty GOSTROUT+2 sty GOSTROUT+2
lda #<AYINT lda #<AYINT
@@ -61,69 +25,20 @@ COLD_START:
ldy #>GIVAYF ldy #>GIVAYF
sta GOGIVEAYF sta GOGIVEAYF
sty GOGIVEAYF+1 sty GOGIVEAYF+1
.endif
.endif
lda #$4C lda #$4C
.ifdef CONFIG_CBM_ALL
sta JMPADRS
.endif
sta GORESTART sta GORESTART
.ifdef AIM65
sta JMPADRS
sta ATN
sta GOSTROUT
.else
.ifndef CONFIG_CBM_ALL
sta GOSTROUT sta GOSTROUT
sta JMPADRS sta JMPADRS
.endif
.ifdef SYM1
sta USR1
sta USR3
sta USR2
.endif
.if (!.def(CONFIG_RAM)) && (!.def(CONFIG_CBM_ALL))
sta USR sta USR
.endif
.endif
.ifndef CONFIG_RAM
.ifdef APPLE
lda #<USR_FUNC
ldy #>USR_FUNC
.else
lda #<IQERR lda #<IQERR
ldy #>IQERR ldy #>IQERR
.endif
.ifdef AIM65
sta ATN+1
sty ATN+2
sta GOSTROUT+1
sty GOSTROUT+2
.else
sta USR+1 sta USR+1
sty USR+2 sty USR+2
.ifdef SYM1
sta USR1+1
sty USR1+2
lda #<DUMPT
ldy #>DUMPT
sta USR2+1
sty USR2+2
lda #<L8C78
ldy #>L8C78
sta USR3+1
sty USR3+2
.endif
.endif
.endif
.ifndef CBM1
lda #WIDTH lda #WIDTH
sta Z17 sta Z17
lda #WIDTH2 lda #WIDTH2
sta Z18 sta Z18
.endif
.endif
; All non-CONFIG_SMALL versions of BASIC have ; All non-CONFIG_SMALL versions of BASIC have
; the same bug here: While the number of bytes ; the same bug here: While the number of bytes
@@ -141,190 +56,81 @@ COLD_START:
; the number of bytes by adding 3 - this ; the number of bytes by adding 3 - this
; copies four bytes too many, which is no ; copies four bytes too many, which is no
; problem. ; problem.
.ifdef CONFIG_SMALL
.ifdef KBD
ldx #GENERIC_CHRGET_END-GENERIC_CHRGET+4
.else
ldx #GENERIC_CHRGET_END-GENERIC_CHRGET
.endif
.else
ldx #GENERIC_CHRGET_END-GENERIC_CHRGET-1 ; XXX ldx #GENERIC_CHRGET_END-GENERIC_CHRGET-1 ; XXX
.endif
L4098: L4098:
lda GENERIC_CHRGET-1,x lda GENERIC_CHRGET-1,x
sta CHRGET-1,x sta CHRGET-1,x
dex dex
bne L4098 bne L4098
.ifdef CONFIG_2
lda #$03 lda #$03
sta DSCLEN sta DSCLEN
.endif
.ifndef KBD
txa txa
sta SHIFTSIGNEXT sta SHIFTSIGNEXT
.ifdef CONFIG_CBM_ALL
sta CURDVC
.endif
sta LASTPT+1 sta LASTPT+1
.ifndef AIM65
.if .defined(CONFIG_NULL) || .defined(CONFIG_PRINTNULLS)
sta Z15
.endif
.endif
.ifndef CONFIG_11
sta POSX
.endif
pha pha
sta Z14 sta Z14
.ifndef CBM2
.ifndef AIM65
.ifndef SYM1
.ifndef MICROTAN
lda #$03 lda #$03
sta DSCLEN sta DSCLEN
.endif
.endif
.endif
.ifndef CONFIG_11
lda #$2C
sta LINNUM+1
.endif
jsr CRDO jsr CRDO
.endif
.ifdef CBM2
inx
stx INPUTBUFFER-3
stx INPUTBUFFER-4
.endif
.ifdef APPLE
lda #$01 lda #$01
sta INPUTBUFFER-3 sta INPUTBUFFER-3
sta INPUTBUFFER-4 sta INPUTBUFFER-4
.endif
.ifdef CONFIG_INPUTBUFFER_0200
lda #$01
sta INPUTBUFFER-3
sta INPUTBUFFER-4
.endif
ldx #TEMPST ldx #TEMPST
stx TEMPPT stx TEMPPT
.ifndef CONFIG_CBM_ALL lda #<$BC00 ; Start of IO
.ifdef KILIAN
lda #<$BC00
sta MEMSIZ sta MEMSIZ
lda #>$BC00 lda #>$BC00
sta MEMSIZ+1 sta MEMSIZ+1
jmp L4106 jmp L4106
.else
lda #<QT_MEMORY_SIZE
ldy #>QT_MEMORY_SIZE
jsr STROUT
.endif
.ifdef APPLE
jsr INLINX
.else
jsr NXIN jsr NXIN
.endif
stx TXTPTR stx TXTPTR
sty TXTPTR+1 sty TXTPTR+1
jsr CHRGET jsr CHRGET
.ifndef AIM65
.ifndef SYM1
cmp #$41 cmp #$41
bne SKIPPED bne SKIPPED
jmp PR_WRITTEN_BY jmp PR_WRITTEN_BY
SKIPPED: SKIPPED:
.endif
.endif
tay tay
bne L40EE bne L40EE
.endif
.ifndef CBM2
lda #<RAMSTART2 lda #<RAMSTART2
.endif
ldy #>RAMSTART2 ldy #>RAMSTART2
.ifdef CONFIG_2
sta TXTTAB sta TXTTAB
sty TXTTAB+1 sty TXTTAB+1
.endif
sta LINNUM sta LINNUM
sty LINNUM+1 sty LINNUM+1
.ifdef CBM2
tay
.else
ldy #$00 ldy #$00
.endif
L40D7: L40D7:
inc LINNUM inc LINNUM
bne L40DD bne L40DD
inc LINNUM+1 inc LINNUM+1
.ifdef CBM1
; CBM: hard RAM top limit is $8000
lda LINNUM+1
cmp #$80
beq L40FA
.endif
.ifdef CBM2
; optimized version of the CBM1 code
bmi L40FA
.endif
.if .def(AIM65)
; AIM65: hard RAM top limit is $A000
lda LINNUM+1
cmp #$A0
beq L40FA
.endif
L40DD: L40DD:
.ifdef CONFIG_2
lda #$55 ; 01010101 / 10101010 lda #$55 ; 01010101 / 10101010
.else
lda #$92 ; 10010010 / 00100100
.endif
sta (LINNUM),y sta (LINNUM),y
cmp (LINNUM),y cmp (LINNUM),y
bne L40FA bne L40FA
asl a asl a
sta (LINNUM),y sta (LINNUM),y
cmp (LINNUM),y cmp (LINNUM),y
.ifdef CONFIG_CBM_ALL
beq L40D7
.else
.ifndef CONFIG_11
beq L40D7; old: faster
bne L40FA
.else
bne L40FA; new: slower bne L40FA; new: slower
beq L40D7 beq L40D7
.endif
L40EE: L40EE:
jsr CHRGOT jsr CHRGOT
jsr LINGET jsr LINGET
tay tay
beq L40FA beq L40FA
jmp SYNERR jmp SYNERR
.endif
L40FA: L40FA:
lda LINNUM lda LINNUM
ldy LINNUM+1 ldy LINNUM+1
sta MEMSIZ sta MEMSIZ
sty MEMSIZ+1 sty MEMSIZ+1
.if !(.def(MICROTAN) || .def(AIM65) || .def(SYM1))
sta FRETOP sta FRETOP
sty FRETOP+1 sty FRETOP+1
.endif
L4106: L4106:
.ifndef CONFIG_CBM_ALL
.ifdef APPLE
lda #$FF
jmp L2829
.word STROUT ; PATCH!
jsr NXIN
.else
lda #<QT_TERMINAL_WIDTH lda #<QT_TERMINAL_WIDTH
ldy #>QT_TERMINAL_WIDTH ldy #>QT_TERMINAL_WIDTH
jsr STROUT jsr STROUT
jsr NXIN jsr NXIN
.endif
stx TXTPTR stx TXTPTR
sty TXTPTR+1 sty TXTPTR+1
jsr CHRGET jsr CHRGET
@@ -339,87 +145,29 @@ L4106:
L2829: L2829:
sta Z17 sta Z17
L4129: L4129:
.ifdef AIM65
sbc #$0A
.else
sbc #$0E sbc #$0E
.endif
bcs L4129 bcs L4129
eor #$FF eor #$FF
.ifdef AIM65
sbc #$08
.else
sbc #$0C sbc #$0C
.endif
clc clc
adc Z17 adc Z17
sta Z18 sta Z18
.endif
L4136: L4136:
.ifdef CONFIG_RAM
lda #<QT_WANT
ldy #>QT_WANT
jsr STROUT
jsr NXIN
stx TXTPTR
sty TXTPTR+1
jsr CHRGET
ldx #<RAMSTART1
ldy #>RAMSTART1
cmp #'Y'
beq L4183
cmp #'A'
beq L4157
cmp #'N'
bne L4136
L4157:
ldx #<IQERR
ldy #>IQERR
stx UNFNC_ATN
sty UNFNC_ATN+1
ldx #<ATN ; overwrite starting
ldy #>ATN ; with ATN
cmp #'A'
beq L4183
ldx #<IQERR
ldy #>IQERR
stx UNFNC_COS
sty UNFNC_COS+1
stx UNFNC_TAN
sty UNFNC_TAN+1
stx UNFNC_SIN
sty UNFNC_SIN+1
ldx #<SIN_COS_TAN_ATN ; overwrite
ldy #>SIN_COS_TAN_ATN ; all of trig.s
L4183:
.else
ldx #<RAMSTART2 ldx #<RAMSTART2
ldy #>RAMSTART2 ldy #>RAMSTART2
.endif
stx TXTTAB stx TXTTAB
sty TXTTAB+1 sty TXTTAB+1
ldy #$00 ldy #$00
tya tya
sta (TXTTAB),y sta (TXTTAB),y
inc TXTTAB inc TXTTAB
.ifndef CBM2
bne L4192 bne L4192
inc TXTTAB+1 inc TXTTAB+1
L4192: L4192:
.endif
.if CONFIG_SCRTCH_ORDER = 1
jsr SCRTCH
.endif
lda TXTTAB lda TXTTAB
ldy TXTTAB+1 ldy TXTTAB+1
jsr REASON jsr REASON
.ifdef CBM2
lda #<QT_BASIC
ldy #>QT_BASIC
jsr STROUT
.else
jsr CRDO jsr CRDO
.endif
lda MEMSIZ lda MEMSIZ
sec sec
sbc TXTTAB sbc TXTTAB
@@ -430,119 +178,32 @@ L4192:
lda #<QT_BYTES_FREE lda #<QT_BYTES_FREE
ldy #>QT_BYTES_FREE ldy #>QT_BYTES_FREE
jsr STROUT jsr STROUT
.if CONFIG_SCRTCH_ORDER = 2
jsr SCRTCH jsr SCRTCH
.endif
.ifdef CONFIG_CBM_ALL
jmp RESTART
.elseif .def(AIM65)
lda #<CRDO
ldy #>CRDO
sta GORESTART+1
sty GORESTART+2
jmp RESTART
.else
lda #<STROUT lda #<STROUT
ldy #>STROUT ldy #>STROUT
sta GOSTROUT+1 sta GOSTROUT+1
sty GOSTROUT+2 sty GOSTROUT+2
.if CONFIG_SCRTCH_ORDER = 3
jsr SCRTCH
.endif
lda #<RESTART lda #<RESTART
ldy #>RESTART ldy #>RESTART
sta GORESTART+1 sta GORESTART+1
sty GORESTART+2 sty GORESTART+2
jmp (GORESTART+1) jmp (GORESTART+1)
.endif
.if .def(CONFIG_RAM) || .def(OSI)
; OSI is compiled for ROM, but includes
; this unused string
QT_WANT:
.byte "WANT SIN-COS-TAN-ATN"
.byte 0
.endif
QT_WRITTEN_BY: QT_WRITTEN_BY:
.ifndef CONFIG_CBM_ALL
.if !(.def(AIM65) || .def(SYM1))
.ifdef APPLE
asc80 "COPYRIGHT 1977 BY MICROSOFT CO"
.byte CR,0
.else
.byte CR,LF,$0C ; FORM FEED .byte CR,LF,$0C ; FORM FEED
.ifndef CONFIG_11
.byte "WRITTEN BY RICHARD W. WEILAND."
.else
.byte "WRITTEN BY WEILAND & GATES" .byte "WRITTEN BY WEILAND & GATES"
.endif
.byte CR,LF,0 .byte CR,LF,0
.endif
.endif
QT_MEMORY_SIZE: QT_MEMORY_SIZE:
.byte "MEMORY SIZE" .byte "MEMORY SIZE"
.byte 0 .byte 0
QT_TERMINAL_WIDTH: QT_TERMINAL_WIDTH:
.if !(.def(AIM65) || .def(SYM1))
.byte "TERMINAL " .byte "TERMINAL "
.endif
.byte "WIDTH" .byte "WIDTH"
.byte 0 .byte 0
.endif
QT_BYTES_FREE: QT_BYTES_FREE:
.byte " BYTES FREE" .byte " BYTES FREE"
.ifdef CBM1
.elseif .def(CBM2)
.byte CR,0
.elseif .def(APPLE)
.byte 0
.else
.byte CR,LF,CR,LF .byte CR,LF,CR,LF
.endif
QT_BASIC: QT_BASIC:
.ifdef OSI
.byte "OSI 6502 BASIC VERSION 1.0 REV 3.2"
.endif
.ifdef KIM
.byte "MOS TECH 6502 BASIC V1.1"
.endif
.ifdef MICROTAN
.byte "MICROTAN BASIC"
.endif
.ifdef AIM65
.byte " AIM 65 BASIC V1.1"
.endif
.ifdef SYM1
.byte "BASIC V1.1"
.endif
.ifdef CBM1
.byte $13 ; HOME
.byte "*** COMMODORE BASIC ***"
.byte $11,$11,$11,0 ; DOWN/DOWN/DOWN
.endif
.ifdef CBM2
.byte "### COMMODORE BASIC ###"
.byte CR,CR,0
.endif
.ifdef APPLE
.byte LF,CR,LF
.byte "APPLE BASIC V1.1"
.endif
.ifndef CONFIG_CBM_ALL
.byte CR,LF .byte CR,LF
.ifdef MICROTAN
.byte "(C) 1980 MICROSOFT"
.elseif .def(AIM65)
.byte 0
.byte "(C) 1978 MICROSOFT"
.elseif .def(SYM1)
.byte "COPYRIGHT 1978 SYNERTEK SYSTEMS CORP."
.else
.byte "COPYRIGHT 1977 BY MICROSOFT CO." .byte "COPYRIGHT 1977 BY MICROSOFT CO."
.endif
.byte CR,LF .byte CR,LF
.ifndef AIM65
.byte 0
.endif
.endif
.endif
-107
View File
@@ -1,123 +1,44 @@
.segment "CODE" .segment "CODE"
.ifndef CONFIG_NO_LINE_EDITING
L2420: L2420:
.ifdef OSI
jsr OUTDO
.endif
dex dex
.ifdef AIM65
bmi L2423
jsr PSLS
jmp INLIN2
LB35F:
jsr OUTDO
.else
bpl INLIN2 bpl INLIN2
.endif
L2423: L2423:
.ifdef OSI
jsr OUTDO
.endif
jsr CRDO jsr CRDO
.endif
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; READ A LINE, AND STRIP OFF SIGN BITS ; READ A LINE, AND STRIP OFF SIGN BITS
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
.ifndef KBD
INLIN: INLIN:
.ifdef APPLE
ldx #$DD
INLIN1:
stx $33
jsr L2900
cpx #$EF
bcs L0C32
ldx #$EF
L0C32:
lda #$00
sta INPUTBUFFER,x
ldx #<(INPUTBUFFER-1)
ldy #>(INPUTBUFFER-1)
rts
.endif
.ifndef APPLE
ldx #$00 ldx #$00
INLIN2: INLIN2:
jsr GETLN jsr GETLN
.ifdef AIM65
cmp #$1A
bne INLINAIM
jsr DU13
jmp INLIN
INLINAIM:
.endif
.ifndef CONFIG_NO_LINE_EDITING
cmp #$07 cmp #$07
beq L2443 beq L2443
.endif
cmp #$0D cmp #$0D
beq L2453 beq L2453
.ifndef CONFIG_NO_LINE_EDITING
cmp #$20 cmp #$20
.ifdef AIM65
bcc L244E
.else
bcc INLIN2 bcc INLIN2
.endif
.ifdef MICROTAN
cmp #$80
.else
.ifdef AIM65
cmp #$7F
beq L2420
.endif
cmp #$7D cmp #$7D
.endif
bcs INLIN2 bcs INLIN2
cmp #$40 ; @ cmp #$40 ; @
.ifdef AIM65
beq LB35F
.else
beq L2423 beq L2423
.ifdef MICROTAN
cmp #$7F ; DEL
.else
cmp #$5F ; _ cmp #$5F ; _
.endif
beq L2420 beq L2420
.endif
L2443: L2443:
.ifdef MICROTAN
cpx #$4F
.else
cpx #$47 cpx #$47
.endif
bcs L244C bcs L244C
.endif
sta INPUTBUFFER,x sta INPUTBUFFER,x
inx inx
.if .def(OSI) || .def(AIM65)
.byte $2C
.else
bne INLIN2 bne INLIN2
.endif
L244C: L244C:
.ifndef CONFIG_NO_LINE_EDITING
lda #$07 ; BEL lda #$07 ; BEL
L244E: L244E:
jsr OUTDO jsr OUTDO
bne INLIN2 bne INLIN2
.endif
L2453: L2453:
jmp L29B9 jmp L29B9
.endif
.endif
.ifndef KBD
.ifndef APPLE
GETLN: GETLN:
.ifdef CONFIG_FILE .ifdef CONFIG_FILE
jsr CHRIN jsr CHRIN
@@ -126,34 +47,7 @@ GETLN:
.else .else
jsr MONRDKEY jsr MONRDKEY
.endif .endif
.ifdef OSI
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
and #$7F
.endif
.endif
.ifdef APPLE
RDKEY:
jsr LFD0C
and #$7F
.endif
.ifdef SYM1
cmp #$14
.else
cmp #$0F cmp #$0F
.endif
bne L2465 bne L2465
pha pha
lda Z14 lda Z14
@@ -162,4 +56,3 @@ RDKEY:
pla pla
L2465: L2465:
rts rts
.endif
-140
View File
@@ -8,25 +8,14 @@
INPUTERR: INPUTERR:
lda INPUTFLG lda INPUTFLG
beq RESPERR ; INPUT beq RESPERR ; INPUT
.ifndef SYM1
.ifndef CONFIG_SMALL
.ifdef CONFIG_10A
; without this, it treats GET errors ; without this, it treats GET errors
; like READ errors ; like READ errors
bmi L2A63 ; READ bmi L2A63 ; READ
ldy #$FF ; GET ldy #$FF ; GET
bne L2A67 bne L2A67
L2A63: L2A63:
.endif
.endif
.endif
.ifdef CONFIG_CBM1_PATCHES
jsr PATCH5
nop
.else
lda Z8C lda Z8C
ldy Z8C+1 ldy Z8C+1
.endif
L2A67: L2A67:
sta CURLIN sta CURLIN
sty CURLIN+1 sty CURLIN+1
@@ -53,8 +42,6 @@ RTS20:
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; "GET" STATEMENT ; "GET" STATEMENT
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
.ifndef CONFIG_SMALL
.ifndef SYM1
GET: GET:
jsr ERRDIR jsr ERRDIR
; CBM: if GET#, then switch input ; CBM: if GET#, then switch input
@@ -71,12 +58,8 @@ LCAB6:
.endif .endif
ldx #<(INPUTBUFFER+1) ldx #<(INPUTBUFFER+1)
ldy #>(INPUTBUFFER+1) ldy #>(INPUTBUFFER+1)
.ifdef CONFIG_NO_INPUTBUFFER_ZP
lda #$00 lda #$00
sta INPUTBUFFER+1 sta INPUTBUFFER+1
.else
sty INPUTBUFFER+1
.endif
lda #$40 lda #$40
jsr PROCESS_INPUT_LIST jsr PROCESS_INPUT_LIST
; CBM: if GET#, then switch input back ; CBM: if GET#, then switch input back
@@ -85,8 +68,6 @@ LCAB6:
bne LCAD8 bne LCAD8
.endif .endif
rts rts
.endif
.endif
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; "INPUT#" STATEMENT ; "INPUT#" STATEMENT
@@ -109,30 +90,13 @@ LCAD8:
LCAE0: LCAE0:
.endif .endif
.ifdef SYM1
LC9B0:
jsr OUTQUES ; '?'
jsr OUTSP
jmp L2A9E
.endif
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; "INPUT" STATEMENT ; "INPUT" STATEMENT
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
INPUT: INPUT:
.ifndef KBD
lsr Z14 lsr Z14
.endif
.ifdef AIM65
lda PRIFLG
sta ZBE
jsr LCFFA
.endif
cmp #$22 cmp #$22
.ifdef SYM1
bne LC9B0
.else
bne L2A9E bne L2A9E
.endif
jsr STRTXT jsr STRTXT
lda #$3B lda #$3B
jsr SYNCHR jsr SYNCHR
@@ -142,16 +106,7 @@ L2A9E:
lda #$2C lda #$2C
sta INPUTBUFFER-1 sta INPUTBUFFER-1
LCAF8: LCAF8:
.ifdef APPLE
jsr INLINX
.elseif .def(SYM1)
jsr INLIN
.else
jsr NXIN jsr NXIN
.endif
.ifdef KBD
bmi L2ABE
.else
.ifdef CONFIG_FILE .ifdef CONFIG_FILE
lda CURDVC lda CURDVC
beq LCB0C beq LCB0C
@@ -168,21 +123,10 @@ LCB0C:
lda CURDVC lda CURDVC
bne LCAF8 bne LCAF8
.endif .endif
.ifdef CONFIG_CBM1_PATCHES
jmp PATCH1
.else
clc clc
jmp CONTROL_C_TYPED jmp CONTROL_C_TYPED
.endif
.endif
NXIN: NXIN:
.ifdef KBD
jsr INLIN
bmi RTS20
pla
jmp LE86C
.else
.ifdef CONFIG_FILE .ifdef CONFIG_FILE
lda CURDVC lda CURDVC
bne LCB21 bne LCB21
@@ -191,17 +135,6 @@ NXIN:
jsr OUTSP jsr OUTSP
LCB21: LCB21:
jmp INLIN jmp INLIN
.endif
; ----------------------------------------------------------------------------
; "GETC" STATEMENT
; ----------------------------------------------------------------------------
.ifdef KBD
GETC:
jsr CONINT
jsr LF43D
jmp LE664
.endif
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; "READ" STATEMENT ; "READ" STATEMENT
@@ -209,17 +142,11 @@ GETC:
READ: READ:
ldx DATPTR ldx DATPTR
ldy DATPTR+1 ldy DATPTR+1
.ifdef CONFIG_NO_READ_Y_IS_ZERO_HACK
; AppleSoft II, too ; AppleSoft II, too
lda #$98 ; READ lda #$98 ; READ
.byte $2C .byte $2C
L2ABE: L2ABE:
lda #$00 ; INPUT lda #$00 ; INPUT
.else
.byte $A9 ; LDA #$98
L2ABE:
tya
.endif
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; PROCESS INPUT LIST ; PROCESS INPUT LIST
@@ -248,19 +175,8 @@ PROCESS_INPUT_ITEM:
jsr CHRGOT jsr CHRGOT
bne INSTART bne INSTART
bit INPUTFLG bit INPUTFLG
.ifndef CONFIG_SMALL ; GET
.ifndef SYM1
bvc L2AF0 bvc L2AF0
.ifdef MICROTAN
jsr MONRDKEY2
.elseif .def(AIM65)
jsr MONRDKEY2
.else
jsr MONRDKEY jsr MONRDKEY
.endif
.ifdef CONFIG_IO_MSB
and #$7F
.endif
sta INPUTBUFFER sta INPUTBUFFER
; BUG: The beq/bne L2AF8 below is supposed ; BUG: The beq/bne L2AF8 below is supposed
; to be always taken. For this to happen, ; to be always taken. For this to happen,
@@ -275,31 +191,16 @@ PROCESS_INPUT_ITEM:
; Microsoft fixed this somewhere after KIM ; Microsoft fixed this somewhere after KIM
; and before MICROTAN, by using beq instead ; and before MICROTAN, by using beq instead
; of bne in the ZP case. ; of bne in the ZP case.
.ifdef CBM1
ldy #>(INPUTBUFFER-1)
ldx #<(INPUTBUFFER-1)
.else
ldx #<(INPUTBUFFER-1) ldx #<(INPUTBUFFER-1)
ldy #>(INPUTBUFFER-1) ldy #>(INPUTBUFFER-1)
.endif
.if .def(CONFIG_2) && (!.def(CONFIG_NO_INPUTBUFFER_ZP))
beq L2AF8 ; always
.else
bne L2AF8 ; always bne L2AF8 ; always
.endif
L2AF0: L2AF0:
.endif
.endif
bmi FINDATA bmi FINDATA
.ifdef CONFIG_FILE .ifdef CONFIG_FILE
lda CURDVC lda CURDVC
bne LCB64 bne LCB64
.endif .endif
.ifdef KBD
jsr OUTQUESSP
.else
jsr OUTQUES jsr OUTQUES
.endif
LCB64: LCB64:
jsr NXIN jsr NXIN
L2AF8: L2AF8:
@@ -311,24 +212,14 @@ INSTART:
jsr CHRGET jsr CHRGET
bit VALTYP bit VALTYP
bpl L2B34 bpl L2B34
.ifndef CONFIG_SMALL ; GET
.ifndef SYM1
bit INPUTFLG bit INPUTFLG
bvc L2B10 bvc L2B10
.ifdef CONFIG_CBM1_PATCHES
lda #$00
jsr PATCH4
nop
.else
inx inx
stx TXTPTR stx TXTPTR
lda #$00 lda #$00
sta CHARAC sta CHARAC
beq L2B1C beq L2B1C
.endif
L2B10: L2B10:
.endif
.endif
sta CHARAC sta CHARAC
cmp #$22 cmp #$22
beq L2B1D beq L2B1D
@@ -347,21 +238,13 @@ L2B1D:
L2B28: L2B28:
jsr STRLT2 jsr STRLT2
jsr POINT jsr POINT
.ifdef CONFIG_SMALL
jsr LETSTRING
.else
jsr PUTSTR jsr PUTSTR
.endif
jmp INPUT_MORE jmp INPUT_MORE
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
L2B34: L2B34:
jsr FIN jsr FIN
.ifdef CONFIG_SMALL
jsr SETFOR
.else
lda VALTYP+1 lda VALTYP+1
jsr LET2 jsr LET2
.endif
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
INPUT_MORE: INPUT_MORE:
jsr CHRGOT jsr CHRGOT
@@ -411,17 +294,10 @@ INPDONE:
lda INPTR lda INPTR
ldy INPTR+1 ldy INPTR+1
ldx INPUTFLG ldx INPUTFLG
.if .def(CONFIG_SMALL) && (!.def(CONFIG_11))
beq L2B94 ; INPUT
.else
bpl L2B94; INPUT or GET bpl L2B94; INPUT or GET
.endif
jmp SETDA jmp SETDA
L2B94: L2B94:
ldy #$00 ldy #$00
.ifdef AIM65
jsr LB8B1
.endif
lda (INPTR),y lda (INPTR),y
beq L2BA1 beq L2BA1
.ifdef CONFIG_FILE .ifdef CONFIG_FILE
@@ -436,24 +312,8 @@ L2BA1:
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
ERREXTRA: ERREXTRA:
.ifdef KBD
.byte "?Extra"
.else
.byte "?EXTRA IGNORED" .byte "?EXTRA IGNORED"
.endif
.byte $0D,$0A,$00 .byte $0D,$0A,$00
ERRREENTRY: ERRREENTRY:
.ifdef KBD
.byte "What?"
.else
.byte "?REDO FROM START" .byte "?REDO FROM START"
.endif
.byte $0D,$0A,$00 .byte $0D,$0A,$00
.ifdef KBD
LEA30:
.byte "B"
.byte $FD
.byte "GsBASIC"
.byte $00,$1B,$0D,$13
.byte " BASIC"
.endif
-33
View File
@@ -1,33 +0,0 @@
.segment "EXTRA"
.export MONRDKEY, MONCOUT, LOAD; SAVE; ISCNTC
LOAD:
rts
SAVE:
rts
ISCNTC:
lda $BC01
cmp #$03
beq @break
rts
@break:
jmp STOP
MONRDKEY:
lda $BC01
bmi @skipped
sta $BC00 ; echo
@skipped:
rts
MONCOUT:
sta $BC00
rts
.segment "RESETVEC"
.word $0000 ; NMI vector
.word RESET ; RESET vector
.word $0000 ; IRQ vector
+1 -15
View File
@@ -1,17 +1,3 @@
.segment "CODE" .segment "CODE"
.ifdef APPLE ; None yet
.include "apple_loadsave.s"
.endif
.ifdef KIM
.include "kim_loadsave.s"
.endif
.ifdef MICROTAN
.include "microtan_loadsave.s"
.endif
.ifdef AIM65
.include "aim65_loadsave.s"
.endif
.ifdef SYM1
.include "sym1_loadsave.s"
.endif
-44
View File
@@ -3,58 +3,14 @@
.segment "CODE" .segment "CODE"
QT_ERROR: QT_ERROR:
.ifdef KBD
.byte " err"
.else
.ifdef APPLE
.byte " ERR"
.byte $07,$07
.else
.byte " ERROR" .byte " ERROR"
.endif
.endif
.byte 0 .byte 0
.ifndef KBD
QT_IN: QT_IN:
.byte " IN " .byte " IN "
.byte $00 .byte $00
.endif
.ifdef KBD
.byte $54,$D2 ; ???
OKPRT:
jsr PRIMM
.byte CR,CR,">>",CR,LF
.byte 0
rts
nop
.else
.ifndef AIM65
QT_OK: QT_OK:
.ifdef CONFIG_CBM_ALL
.byte CR,LF,"READY.",CR,LF
.else
.ifdef APPLE
; binary patch!
.byte CR,0,0,"K",CR,LF
.else
.byte CR,LF,"OK",CR,LF .byte CR,LF,"OK",CR,LF
.endif
.endif
.byte 0 .byte 0
.endif
.endif
QT_BREAK: QT_BREAK:
.ifdef KBD
.byte CR,LF," Brk"
.byte 0
.byte $54,$D0 ; ???
.elseif .def(MICROTAN) || .def(AIM65)
.byte CR,LF,"BREAK" .byte CR,LF,"BREAK"
.byte 0 .byte 0
.else
.byte CR,LF,"BREAK"
.byte 0
.endif
-72
View File
@@ -60,10 +60,8 @@ LET:
sty FORPNT+1 sty FORPNT+1
lda #TOKEN_EQUAL lda #TOKEN_EQUAL
jsr SYNCHR jsr SYNCHR
.ifndef CONFIG_SMALL
lda VALTYP+1 lda VALTYP+1
pha pha
.endif
lda VALTYP lda VALTYP
pha pha
jsr FRMEVL jsr FRMEVL
@@ -71,7 +69,6 @@ LET:
rol a rol a
jsr CHKVAL jsr CHKVAL
bne LETSTRING bne LETSTRING
.ifndef CONFIG_SMALL
pla pla
LET2: LET2:
bpl L2923 bpl L2923
@@ -85,79 +82,18 @@ LET2:
sta (FORPNT),y sta (FORPNT),y
rts rts
L2923: L2923:
.endif
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; REAL VARIABLE = EXPRESSION ; REAL VARIABLE = EXPRESSION
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
jmp SETFOR jmp SETFOR
LETSTRING: LETSTRING:
.ifndef CONFIG_SMALL
pla pla
.endif
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; INSTALL STRING, DESCRIPTOR ADDRESS IS AT FAC+3,4 ; INSTALL STRING, DESCRIPTOR ADDRESS IS AT FAC+3,4
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
PUTSTR: PUTSTR:
.ifdef CONFIG_CBM_ALL
ldy FORPNT+1
.ifdef CBM1
cpy #$D0 ; TI$
.else
cpy #$DE
.endif
bne LC92B
jsr FREFAC
cmp #$06
.ifdef CBM2
bne IQERR1
.else
jne IQERR
.endif
ldy #$00
sty FAC
sty FACSIGN
LC8E8:
sty STRNG2
jsr LC91C
jsr MUL10
inc STRNG2
ldy STRNG2
jsr LC91C
jsr COPY_FAC_TO_ARG_ROUNDED
tax
beq LC902
inx
txa
jsr LD9BF
LC902:
ldy STRNG2
iny
cpy #$06
bne LC8E8
jsr MUL10
jsr QINT
ldx #$02
sei
LC912:
lda FAC+2,x
sta TISTR,x
dex
bpl LC912
cli
rts
LC91C:
lda (INDEX),y
jsr CHRGOT2
bcc LC926
IQERR1:
jmp IQERR
LC926:
sbc #$2F
jmp ADDACC
LC92B:
.endif
ldy #$02 ldy #$02
lda (FAC_LAST-1),y lda (FAC_LAST-1),y
cmp FRETOP+1 cmp FRETOP+1
@@ -205,14 +141,6 @@ L2963:
sta (FORPNT),y sta (FORPNT),y
RET5: RET5:
rts rts
.ifdef AIM65
LB89D:
cmp #$21
bne RET5
lda #$80
sta PRIFLG
jmp CHRGET
.endif
.ifdef CONFIG_FILE .ifdef CONFIG_FILE
PRINTH: PRINTH:
-16
View File
@@ -49,11 +49,9 @@ ERRDIR:
inx inx
bne RTS9 bne RTS9
ldx #ERR_ILLDIR ldx #ERR_ILLDIR
.ifdef CONFIG_2
.byte $2C .byte $2C
LD288: LD288:
ldx #ERR_UNDEFFN ldx #ERR_UNDEFFN
.endif
L31AF: L31AF:
jmp ERROR jmp ERROR
DEF: DEF:
@@ -67,9 +65,7 @@ DEF:
jsr CHKCLS jsr CHKCLS
lda #TOKEN_EQUAL lda #TOKEN_EQUAL
jsr SYNCHR jsr SYNCHR
.ifndef CONFIG_SMALL
pha pha
.endif
lda VARPNT+1 lda VARPNT+1
pha pha
lda VARPNT lda VARPNT
@@ -102,24 +98,14 @@ L31F3:
pla pla
sta FNCNAM+1 sta FNCNAM+1
ldy #$02 ldy #$02
.ifndef CONFIG_2
ldx #ERR_UNDEFFN
.endif
lda (FNCNAM),y lda (FNCNAM),y
.ifndef CONFIG_2
beq L31AF
.endif
sta VARPNT sta VARPNT
tax tax
iny iny
lda (FNCNAM),y lda (FNCNAM),y
.ifdef CONFIG_2
beq LD288 beq LD288
.endif
sta VARPNT+1 sta VARPNT+1
.ifndef CONFIG_SMALL
iny iny
.endif
L3219: L3219:
lda (VARPNT),y lda (VARPNT),y
pha pha
@@ -166,9 +152,7 @@ L3250:
pla pla
iny iny
sta (FNCNAM),y sta (FNCNAM),y
.ifndef CONFIG_SMALL
pla pla
iny iny
sta (FNCNAM),y sta (FNCNAM),y
.endif
rts rts
-76
View File
@@ -1,76 +0,0 @@
; KBD specific patches
.segment "CODE"
.ifdef KBD
VARTAB_MINUS_2_TO_AY:
lda VARTAB
sec
sbc #$02
ldy VARTAB+1
bcs LF42C
dey
LF42C:
rts
; ----------------------------------------------------------------------------
GET_UPPER:
lda INPUTBUFFERX,x
LF430:
cmp #'a'
bcc LF43A
cmp #'z'+1
bcs LF43A
LF438:
sbc #$1F
LF43A:
rts
; ----------------------------------------------------------------------------
GETLN:
ldx #$5D
LF43D:
txa
and #$7F
cmp $0340
beq LF44D
sta $0340
lda #$03
jsr LDE48
LF44D:
jsr LDE7F
bne RTS4
cpx #$80
bcc LF44D
RTS4:
rts
; ----------------------------------------------------------------------------
LF457:
lda TXTTAB
ldx TXTTAB+1
LF45B:
sta JMPADRS+1
stx JMPADRS+2
ldy #$01
lda (JMPADRS+1),y
beq LF438
iny
iny
lda (JMPADRS+1),y
dey
cmp LINNUM+1
bne LF472
lda (JMPADRS+1),y
cmp LINNUM
LF472:
bcs LF43A
dey
lda (JMPADRS+1),y
tax
dey
lda (JMPADRS+1),y
bcc LF45B
LF47D:
jmp (JMPADRS+1)
.endif
-1
View File
@@ -24,7 +24,6 @@
.include "array.s" .include "array.s"
.include "misc2.s" .include "misc2.s"
.include "string.s" .include "string.s"
.include "misc3.s"
.include "poke.s" .include "poke.s"
.include "float.s" .include "float.s"
.include "chrget.s" .include "chrget.s"
-33
View File
@@ -1,6 +1,5 @@
.segment "CODE" .segment "CODE"
.ifndef CONFIG_NO_POKE
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; EVALUATE "EXP1,EXP2" ; EVALUATE "EXP1,EXP2"
; ;
@@ -24,12 +23,7 @@ COMBYTE:
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
GETADR: GETADR:
lda FACSIGN lda FACSIGN
.ifdef APPLE
nop ; PATCH
nop
.else
bmi GOIQ bmi GOIQ
.endif
lda FAC lda FAC
cmp #$91 cmp #$91
bcs GOIQ bcs GOIQ
@@ -44,40 +38,18 @@ GETADR:
; "PEEK" FUNCTION ; "PEEK" FUNCTION
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
PEEK: PEEK:
.ifdef CONFIG_PEEK_SAVE_LINNUM
lda LINNUM+1 lda LINNUM+1
pha pha
lda LINNUM lda LINNUM
pha pha
.endif
jsr GETADR jsr GETADR
ldy #$00 ldy #$00
.ifdef CBM1
; disallow PEEK between $C000 and $DFFF
cmp #$C0
bcc LD6F3
cmp #$E1
bcc LD6F6
LD6F3:
.endif
.ifdef CBM2
nop ; patch that disables the compares above
nop
nop
nop
nop
nop
nop
nop
.endif
lda (LINNUM),y lda (LINNUM),y
tay tay
.ifdef CONFIG_PEEK_SAVE_LINNUM
pla pla
sta LINNUM sta LINNUM
pla pla
sta LINNUM+1 sta LINNUM+1
.endif
LD6F6: LD6F6:
jmp SNGFLT jmp SNGFLT
@@ -99,11 +71,7 @@ WAIT:
stx FORPNT stx FORPNT
ldx #$00 ldx #$00
jsr CHRGOT jsr CHRGOT
.ifdef CONFIG_EASTER_EGG
beq EASTER_EGG beq EASTER_EGG
.else
beq L3628
.endif
jsr COMBYTE jsr COMBYTE
L3628: L3628:
stx FORPNT+1 stx FORPNT+1
@@ -115,4 +83,3 @@ L362C:
beq L362C beq L362C
RTS3: RTS3:
rts rts
.endif
+2 -250
View File
@@ -1,16 +1,5 @@
.segment "CODE" .segment "CODE"
.ifdef AIM65
PRINT:
lda PRIFLG
sta ZBE
jsr L297E
LB8B1:
lda ZBE
sta PRIFLG
rts
.endif
PRSTRING: PRSTRING:
jsr STRPRT jsr STRPRT
L297E: L297E:
@@ -19,30 +8,16 @@ L297E:
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; "PRINT" STATEMENT ; "PRINT" STATEMENT
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
.ifndef AIM65
PRINT: PRINT:
.endif
beq CRDO beq CRDO
PRINT2: PRINT2:
beq L29DD beq L29DD
.ifdef AIM65
jsr LB89D
beq L29DD
.endif
cmp #TOKEN_TAB cmp #TOKEN_TAB
beq L29F5 beq L29F5
cmp #TOKEN_SPC cmp #TOKEN_SPC
.ifdef CONFIG_2
clc ; also AppleSoft II clc ; also AppleSoft II
.endif
beq L29F5 beq L29F5
cmp #',' cmp #','
; Pre-KIM had no CLC. KIM added the CLC
; here. Post-KIM moved the CLC up...
; (makes no sense on KIM, liveness = 0)
.if .def(CONFIG_11A) && (!.def(CONFIG_2))
clc
.endif
beq L29DE beq L29DE
cmp #$3B cmp #$3B
beq L2A0D beq L2A0D
@@ -51,216 +26,77 @@ PRINT2:
bmi PRSTRING bmi PRSTRING
jsr FOUT jsr FOUT
jsr STRLIT jsr STRLIT
.ifndef CONFIG_NO_CR
ldy #$00 ldy #$00
lda (FAC_LAST-1),y lda (FAC_LAST-1),y
clc clc
adc POSX adc POSX
.ifdef KBD
cmp #$28
.else
cmp Z17 cmp Z17
.endif
bcc L29B1 bcc L29B1
jsr CRDO jsr CRDO
L29B1: L29B1:
.endif
jsr STRPRT jsr STRPRT
.ifdef KBD
jmp L297E
.else
jsr OUTSP jsr OUTSP
bne L297E ; branch always bne L297E ; branch always
.endif
.ifdef KBD
; PATCHES
LE86C:
pla
jmp CONTROL_C_TYPED
LE870:
jsr GETBYT
txa
LE874:
beq LE878
bpl LE8F2
LE878:
jmp IQERR
; PATCHES
.endif
.ifndef KBD
L29B9: L29B9:
.ifdef CONFIG_INPUTBUFFER_0200
lda #$00 lda #$00
sta INPUTBUFFER,x sta INPUTBUFFER,x
ldx #<(INPUTBUFFER-1) ldx #<(INPUTBUFFER-1)
ldy #>(INPUTBUFFER-1) ldy #>(INPUTBUFFER-1)
.else
.ifndef APPLE
ldy #$00
sty INPUTBUFFER,x
ldx #LINNUM+1
.endif
.if .def(MICROTAN) || .def(SYM1)
bne CRDO2
.endif
.endif
.ifdef CONFIG_FILE .ifdef CONFIG_FILE
lda CURDVC lda CURDVC
bne L29DD bne L29DD
.endif .endif
.endif
CRDO: CRDO:
.if .def(CONFIG_PRINTNULLS) && .def(CONFIG_FILE) lda #CR
lda CURDVC
bne LC9D8
sta POSX sta POSX
LC9D8:
.endif
lda #CRLF_1
.ifndef CONFIG_CBM_ALL
sta POSX
.endif
jsr OUTDO jsr OUTDO
CRDO2: CRDO2:
lda #CRLF_2 lda #LF
jsr OUTDO jsr OUTDO
PRINTNULLS: PRINTNULLS:
.if .def(KBD) || .def(AIM65)
lda #$00
sta POSX
eor #$FF eor #$FF
.else
.if .def(CONFIG_NULL) || .def(CONFIG_PRINTNULLS)
.ifdef CONFIG_FILE
; Although there is no statement for it,
; CBM1 had NULL support and ignores
; it when not targeting the screen,
; CBM2 dropped it completely.
lda CURDVC
bne L29DD
.endif
txa
pha
ldx Z15
beq L29D9
.ifdef SYM1
lda #$FF
.else
lda #$00
.endif
L29D3:
jsr OUTDO
dex
bne L29D3
L29D9:
stx POSX
pla
tax
.else
.ifndef CONFIG_2
lda #$00
sta POSX
.endif
eor #$FF
.endif
.endif
L29DD: L29DD:
rts rts
L29DE: L29DE:
lda POSX lda POSX
.ifndef CONFIG_NO_CR
.ifdef KBD
cmp #$1A
.else
cmp Z18 cmp Z18
.endif
bcc L29EA bcc L29EA
jsr CRDO jsr CRDO
jmp L2A0D jmp L2A0D
L29EA: L29EA:
.endif
sec sec
L29EB: L29EB:
.if .def(CONFIG_CBM_ALL) || .def(AIM65)
sbc #$0A
.else
.ifdef KBD
sbc #$0D
.else
sbc #$0E sbc #$0E
.endif
.endif
bcs L29EB bcs L29EB
eor #$FF eor #$FF
adc #$01 adc #$01
bne L2A08 bne L2A08
L29F5: L29F5:
.ifdef CONFIG_11A
php php
.else
pha
.endif
jsr GTBYTC jsr GTBYTC
cmp #')' cmp #')'
.ifdef CONFIG_11A
.ifdef CONFIG_2
bne SYNERR4 bne SYNERR4
.else
jne SYNERR
.endif
plp plp
bcc L2A09 bcc L2A09
.else
.ifdef CONFIG_11
jne SYNERR
.else
bne SYNERR4
.endif
pla
cmp #TOKEN_TAB
.ifdef CONFIG_11
bne L2A09
.else
bne L2A0A
.endif
.endif
txa txa
sbc POSX sbc POSX
bcc L2A0D bcc L2A0D
.ifndef CONFIG_11
beq L2A0D
.endif
L2A08: L2A08:
tax tax
.ifdef CONFIG_11
L2A09: L2A09:
inx inx
.endif
L2A0A: L2A0A:
.ifndef CONFIG_11
jsr OUTSP
.endif
dex dex
.ifndef CONFIG_11
bne L2A0A
.else
bne L2A13 bne L2A13
.endif
L2A0D: L2A0D:
jsr CHRGET jsr CHRGET
jmp PRINT2 jmp PRINT2
.ifdef CONFIG_11
L2A13: L2A13:
jsr OUTSP jsr OUTSP
bne L2A0A bne L2A0A
.endif
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; PRINT STRING AT (Y,A) ; PRINT STRING AT (Y,A)
@@ -289,7 +125,6 @@ L2A22:
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
OUTSP: OUTSP:
.ifdef CONFIG_FILE .ifdef CONFIG_FILE
.ifndef CBM1
; on non-screen devices, print SPACE ; on non-screen devices, print SPACE
; instead of CRSR RIGHT ; instead of CRSR RIGHT
lda CURDVC lda CURDVC
@@ -297,7 +132,6 @@ OUTSP:
lda #$20 lda #$20
.byte $2C .byte $2C
LCA40: LCA40:
.endif
lda #$1D ; CRSR RIGHT lda #$1D ; CRSR RIGHT
.else .else
lda #$20 lda #$20
@@ -310,101 +144,19 @@ OUTQUES:
; PRINT CHAR FROM (A) ; PRINT CHAR FROM (A)
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
OUTDO: OUTDO:
.ifndef KBD
bit Z14 bit Z14
bmi L2A56 bmi L2A56
.endif
.if .def(CONFIG_PRINT_CR) || .def(CBM1)
; Commodore forgot to remove this in CBM1
pha
.endif
.ifdef CBM1
cmp #$1D ; CRSR RIGHT
beq LCA6A
cmp #$9D ; CRSR LEFT
beq LCA5A
cmp #$14 ; DEL
bne LCA64
LCA5A:
lda POSX
beq L2A4E
lda CURDVC
bne L2A4E
dec POSX
LCA64:
and #$7F
.endif
.ifndef CBM2
cmp #$20 cmp #$20
bcc L2A4E bcc L2A4E
.endif
LCA6A: LCA6A:
.ifdef CONFIG_CBM1_PATCHES
lda CURDVC
jsr PATCH6
nop
.endif
.ifdef CONFIG_PRINT_CR
lda POSX
cmp Z17
bne L2A4C
.ifdef AIM65
lda #$00
sta POSX
.elseif .def(APPLE)
nop ; PATCH!
nop ; don't print CR
nop
.else
jsr CRDO
.endif
L2A4C:
.endif
.ifndef CONFIG_CBM_ALL
inc POSX inc POSX
.endif
L2A4E: L2A4E:
.if .def(CONFIG_PRINT_CR) || .def(CBM1)
; Commodore forgot to remove this in CBM1
pla
.endif
.ifdef CONFIG_MONCOUT_DESTROYS_Y
sty DIMFLG
.endif
.ifdef CONFIG_IO_MSB
ora #$80
.endif
jsr MONCOUT jsr MONCOUT
.ifdef CONFIG_IO_MSB
and #$7F
.endif
.ifdef CONFIG_MONCOUT_DESTROYS_Y
ldy DIMFLG
.endif
.ifdef OSI
nop nop
nop nop
nop nop
nop nop
.endif
L2A56: L2A56:
and #$FF and #$FF
LE8F2: LE8F2:
rts rts
; ----------------------------------------------------------------------------
; ???
; ----------------------------------------------------------------------------
.ifdef KBD
LE8F3:
pha
lda $047F
clc
beq LE900
lda #$00
sta $047F
sec
LE900:
pla
rts
.endif
-278
View File
@@ -32,22 +32,12 @@ LC366:
jsr OUTQUES jsr OUTQUES
L2329: L2329:
lda ERROR_MESSAGES,x lda ERROR_MESSAGES,x
.ifndef CONFIG_SMALL_ERROR
pha pha
and #$7F and #$7F
.endif
jsr OUTDO jsr OUTDO
.ifdef CONFIG_SMALL_ERROR
lda ERROR_MESSAGES+1,x
.ifdef KBD
and #$7F
.endif
jsr OUTDO
.else
inx inx
pla pla
bpl L2329 bpl L2329
.endif
jsr STKINI jsr STKINI
lda #<QT_ERROR lda #<QT_ERROR
ldy #>QT_ERROR ldy #>QT_ERROR
@@ -68,45 +58,20 @@ PRINT_ERROR_LINNUM:
; WARM RESTART ENTRY ; WARM RESTART ENTRY
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
RESTART: RESTART:
.ifdef KBD
jsr CRDO
nop
L2351X:
jsr OKPRT
L2351:
jsr INLIN
LE28E:
bpl RESTART
.else
lsr Z14 lsr Z14
.ifndef AIM65
lda #<QT_OK lda #<QT_OK
ldy #>QT_OK ldy #>QT_OK
.ifdef CONFIG_CBM_ALL
jsr STROUT
.else
jsr GOSTROUT jsr GOSTROUT
.endif
.else
jsr GORESTART
.endif
L2351: L2351:
jsr INLIN jsr INLIN
.endif
stx TXTPTR stx TXTPTR
sty TXTPTR+1 sty TXTPTR+1
jsr CHRGET jsr CHRGET
.ifdef CONFIG_11
; bug in pre-1.1: CHRGET sets Z on '\0' ; bug in pre-1.1: CHRGET sets Z on '\0'
; and ':' - a line starting with ':' in ; and ':' - a line starting with ':' in
; direct mode gets ignored ; direct mode gets ignored
tax tax
.endif
.ifdef KBD
beq L2351X
.else
beq L2351 beq L2351
.endif
ldx #$FF ldx #$FF
stx CURLIN+1 stx CURLIN+1
bcc NUMBERED_LINE bcc NUMBERED_LINE
@@ -120,57 +85,6 @@ NUMBERED_LINE:
jsr LINGET jsr LINGET
jsr PARSE_INPUT_LINE jsr PARSE_INPUT_LINE
sty EOLPNTR sty EOLPNTR
.ifdef KBD
jsr FNDLIN2
lda JMPADRS+1
sta LOWTR
sta Z96
lda JMPADRS+2
sta LOWTR+1
sta Z96+1
lda LINNUM
sta L06FE
lda LINNUM+1
sta L06FE+1
inc LINNUM
bne LE2D2
inc LINNUM+1
bne LE2D2
jmp SYNERR
LE2D2:
jsr LF457
ldx #Z96
jsr CMPJMPADRS
bcs LE2FD
LE2DC:
ldx #$00
lda (JMPADRS+1,x)
sta (Z96,x)
inc JMPADRS+1
bne LE2E8
inc JMPADRS+2
LE2E8:
inc Z96
bne LE2EE
inc Z96+1
LE2EE:
ldx #VARTAB
jsr CMPJMPADRS
bne LE2DC
lda Z96
sta VARTAB
lda Z96+1
sta VARTAB+1
LE2FD:
jsr SETPTRS
jsr LE33D
lda INPUTBUFFER
LE306:
beq LE28E
cmp #$A5
beq LE306
clc
.else
jsr FNDLIN jsr FNDLIN
bcc PUT_NEW_LINE bcc PUT_NEW_LINE
ldy #$01 ldy #$01
@@ -214,25 +128,13 @@ L23AD:
inc DEST+1 inc DEST+1
dex dex
bne L23AD bne L23AD
.endif
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
PUT_NEW_LINE: PUT_NEW_LINE:
.ifndef KBD
.ifdef CONFIG_2
jsr SETPTRS jsr SETPTRS
jsr LE33D jsr LE33D
lda INPUTBUFFER lda INPUTBUFFER
beq L2351 beq L2351
clc clc
.else
lda INPUTBUFFER
beq FIX_LINKS
lda MEMSIZ
ldy MEMSIZ+1
sta FRETOP
sty FRETOP+1
.endif
.endif
lda VARTAB lda VARTAB
sta HIGHTR sta HIGHTR
adc EOLPNTR adc EOLPNTR
@@ -244,12 +146,10 @@ PUT_NEW_LINE:
L23D6: L23D6:
sty HIGHDS+1 sty HIGHDS+1
jsr BLTU jsr BLTU
.ifdef CONFIG_INPUTBUFFER_0200
lda LINNUM lda LINNUM
ldy LINNUM+1 ldy LINNUM+1
sta INPUTBUFFER-2 sta INPUTBUFFER-2
sty INPUTBUFFER-1 sty INPUTBUFFER-1
.endif
lda STREND lda STREND
ldy STREND+1 ldy STREND+1
sta VARTAB sta VARTAB
@@ -269,11 +169,9 @@ L23E6:
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
FIX_LINKS: FIX_LINKS:
jsr SETPTRS jsr SETPTRS
.ifdef CONFIG_2
jsr LE33D jsr LE33D
jmp L2351 jmp L2351
LE33D: LE33D:
.endif
lda TXTTAB lda TXTTAB
ldy TXTTAB+1 ldy TXTTAB+1
sta INDEX sta INDEX
@@ -282,11 +180,7 @@ LE33D:
L23FA: L23FA:
ldy #$01 ldy #$01
lda (INDEX),y lda (INDEX),y
.ifdef CONFIG_2
beq RET3 beq RET3
.else
jeq L2351
.endif
ldy #$04 ldy #$04
L2405: L2405:
iny iny
@@ -306,16 +200,10 @@ L2405:
sta INDEX+1 sta INDEX+1
bcc L23FA ; always bcc L23FA ; always
; ----------------------------------------------------------------------------
.ifdef KBD
.include "kbd_loadsave.s"
.endif
.ifdef CONFIG_2
; !!! kbd_loadsave.s requires an RTS here! ; !!! kbd_loadsave.s requires an RTS here!
RET3: RET3:
rts rts
.endif
.include "inline.s" .include "inline.s"
@@ -328,14 +216,6 @@ PARSE_INPUT_LINE:
sty DATAFLG sty DATAFLG
L246C: L246C:
lda INPUTBUFFERX,x lda INPUTBUFFERX,x
.ifdef CONFIG_CBM_ALL
bpl LC49E
cmp #$FF
beq L24AC
inx
bne L246C
LC49E:
.endif
cmp #$20 cmp #$20
beq L24AC beq L24AC
sta ENDCHR sta ENDCHR
@@ -368,15 +248,7 @@ L2496:
L2497: L2497:
inx inx
L2498: L2498:
.ifdef KBD
jsr GET_UPPER
.else
lda INPUTBUFFERX,x lda INPUTBUFFERX,x
.ifndef CONFIG_2
cmp #$20
beq L2497
.endif
.endif
sec sec
sbc TOKEN_NAME_TABLE,y sbc TOKEN_NAME_TABLE,y
beq L2496 beq L2496
@@ -437,9 +309,7 @@ L24DB:
; ---END OF LINE------------------ ; ---END OF LINE------------------
L24EA: L24EA:
sta INPUTBUFFER-3,y sta INPUTBUFFER-3,y
.ifdef CONFIG_NO_INPUTBUFFER_ZP
dec TXTPTR+1 dec TXTPTR+1
.endif
lda #<(INPUTBUFFER-1) lda #<(INPUTBUFFER-1)
sta TXTPTR sta TXTPTR
rts rts
@@ -454,32 +324,6 @@ L24EA:
; LOWTR POINTS AT LINE ; LOWTR POINTS AT LINE
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
FNDLIN: FNDLIN:
.ifdef KBD
jsr CHRGET
jmp LE444
LE440:
php
jsr LINGET
LE444:
jsr LF457
ldx #$FF
plp
beq LE464
jsr CHRGOT
beq L2520
cmp #$A5
bne L2520
jsr CHRGET
beq LE464
bcs LE461
jsr LINGET
beq L2520
LE461:
jmp SYNERR
LE464:
stx LINNUM
stx LINNUM+1
.else
lda TXTTAB lda TXTTAB
ldx TXTTAB+1 ldx TXTTAB+1
FL1: FL1:
@@ -511,7 +355,6 @@ L2516:
bcs FL1 bcs FL1
L251F: L251F:
clc clc
.endif
L2520: L2520:
rts rts
@@ -527,9 +370,7 @@ SCRTCH:
iny iny
sta (TXTTAB),y sta (TXTTAB),y
lda TXTTAB lda TXTTAB
.ifdef CONFIG_2
clc clc
.endif
adc #$02 adc #$02
sta VARTAB sta VARTAB
lda TXTTAB+1 lda TXTTAB+1
@@ -538,7 +379,6 @@ SCRTCH:
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
SETPTRS: SETPTRS:
jsr STXTPT jsr STXTPT
.ifdef CONFIG_11A
lda #$00 lda #$00
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
@@ -546,20 +386,11 @@ SETPTRS:
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
CLEAR: CLEAR:
bne L256A bne L256A
.endif
CLEARC: CLEARC:
.ifdef KBD
lda #<CONST_MEMSIZ
ldy #>CONST_MEMSIZ
.else
lda MEMSIZ lda MEMSIZ
ldy MEMSIZ+1 ldy MEMSIZ+1
.endif
sta FRETOP sta FRETOP
sty FRETOP+1 sty FRETOP+1
.ifdef CONFIG_CBM_ALL
jsr CLALL
.endif
lda VARTAB lda VARTAB
ldy VARTAB+1 ldy VARTAB+1
sta ARYTAB sta ARYTAB
@@ -572,22 +403,13 @@ STKINI:
ldx #TEMPST ldx #TEMPST
stx TEMPPT stx TEMPPT
pla pla
.ifdef CONFIG_2
tay tay
.else
sta STACK+STACK_TOP+1
.endif
pla pla
.ifndef CONFIG_2
sta STACK+STACK_TOP+2
.endif
ldx #STACK_TOP ldx #STACK_TOP
txs txs
.ifdef CONFIG_2
pha pha
tya tya
pha pha
.endif
lda #$00 lda #$00
sta OLDTEXT+1 sta OLDTEXT+1
sta SUBFLG sta SUBFLG
@@ -607,121 +429,41 @@ STXTPT:
sta TXTPTR+1 sta TXTPTR+1
rts rts
; ----------------------------------------------------------------------------
.ifdef KBD
LE4C0:
ldy #<LE444
ldx #>LE444
LE4C4:
jsr LFFD6
jsr LFFED
lda $0504
clc
adc #$08
sta $0504
rts
CMPJMPADRS:
lda 1,x
cmp JMPADRS+2
bne LE4DE
lda 0,x
cmp JMPADRS+1
LE4DE:
rts
.endif
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; "LIST" STATEMENT ; "LIST" STATEMENT
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
LIST: LIST:
.ifdef KBD
jsr LE440
bne LE4DE
pla
pla
L25A6:
jsr CRDO
.else
.ifdef AIM65
pha
lda #$00
LB4BF:
sta INPUTFLG
pla
.endif
.ifdef MICROTAN
php
jmp LE21C ; patch
LC57E:
.elseif .def(AIM65) || .def(SYM1)
php
jsr LINGET
LC57E:
.else
bcc L2581 bcc L2581
beq L2581 beq L2581
cmp #TOKEN_MINUS cmp #TOKEN_MINUS
bne L256A bne L256A
L2581: L2581:
jsr LINGET jsr LINGET
.endif
jsr FNDLIN jsr FNDLIN
.if .def(MICROTAN) || .def(AIM65) || .def(SYM1)
plp
beq L2598
.endif
jsr CHRGOT jsr CHRGOT
.if .def(MICROTAN) || .def(AIM65) || .def(SYM1)
beq L25A6
.else
beq L2598 beq L2598
.endif
cmp #TOKEN_MINUS cmp #TOKEN_MINUS
bne L2520 bne L2520
jsr CHRGET jsr CHRGET
.if .def(MICROTAN) || .def(AIM65) || .def(SYM1)
beq L2598
jsr LINGET
beq L25A6
rts
.else
jsr LINGET jsr LINGET
bne L2520 bne L2520
.endif
L2598: L2598:
.if !(.def(MICROTAN) || .def(AIM65) || .def(SYM1))
pla pla
pla pla
lda LINNUM lda LINNUM
ora LINNUM+1 ora LINNUM+1
bne L25A6 bne L25A6
.endif
lda #$FF lda #$FF
sta LINNUM sta LINNUM
sta LINNUM+1 sta LINNUM+1
L25A6: L25A6:
.if .def(MICROTAN) || .def(AIM65) || .def(SYM1)
pla
pla
.endif
L25A6X: L25A6X:
.endif
ldy #$01 ldy #$01
.ifdef CONFIG_DATAFLG
sty DATAFLG sty DATAFLG
.endif
lda (LOWTRX),y lda (LOWTRX),y
beq L25E5 beq L25E5
.ifdef MICROTAN
jmp LE21F
LC5A9:
.else
jsr ISCNTC jsr ISCNTC
.endif
.ifndef KBD
jsr CRDO jsr CRDO
.endif
iny iny
lda (LOWTRX),y lda (LOWTRX),y
tax tax
@@ -743,18 +485,14 @@ L25CA:
and #$7F and #$7F
L25CE: L25CE:
jsr OUTDO jsr OUTDO
.ifdef CONFIG_DATAFLG
cmp #$22 cmp #$22
bne LA519 bne LA519
lda DATAFLG lda DATAFLG
eor #$FF eor #$FF
sta DATAFLG sta DATAFLG
LA519: LA519:
.endif
iny iny
.ifdef CONFIG_11
beq L25E5 beq L25E5
.endif
lda (LOWTRX),y lda (LOWTRX),y
bne L25E8 bne L25E8
tay tay
@@ -764,31 +502,15 @@ LA519:
lda (LOWTRX),y lda (LOWTRX),y
stx LOWTRX stx LOWTRX
sta LOWTRX+1 sta LOWTRX+1
.if .def(MICROTAN) || .def(AIM65) || .def(SYM1)
bne L25A6X
.else
bne L25A6 bne L25A6
.endif
L25E5: L25E5:
.ifdef AIM65
lda INPUTFLG
beq L25E5a
jsr CRDO
jsr CRDO
lda #$1a
jsr OUTDO
jsr $e50a
L25E5a:
.endif
jmp RESTART jmp RESTART
L25E8: L25E8:
bpl L25CE bpl L25CE
.ifdef CONFIG_DATAFLG
cmp #$FF cmp #$FF
beq L25CE beq L25CE
bit DATAFLG bit DATAFLG
bmi L25CE bmi L25CE
.endif
sec sec
sbc #$7F sbc #$7F
tax tax
-80
View File
@@ -4,51 +4,6 @@
; "RND" FUNCTION ; "RND" FUNCTION
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
.ifdef KBD
RND:
ldx #$10
jsr SIGN
beq LFC26
bmi LFC10
lda RNDSEED
ldy RNDSEED+1
LFBFA:
sta FAC+2
sty FAC+1
LFBFE:
asl a
asl a
eor FAC+2
asl a
eor FAC+1
asl a
asl a
asl a
asl a
eor FAC+1
asl a
rol FAC+2
rol FAC+1
LFC10:
lda FAC+2
dex
bne LFBFE
sta RNDSEED
sta FAC+3
lda FAC+1
sta RNDSEED+1
lda #$80
sta FAC
stx FACSIGN
jmp NORMALIZE_FAC2
LFC26:
ldy $03CA
lda $03C7
ora #$01
GOMOVMF:
bne LFBFA
.byte $F0
.else
; <<< THESE ARE MISSING ONE BYTE FOR FP VALUES >>> ; <<< THESE ARE MISSING ONE BYTE FOR FP VALUES >>>
; (non CONFIG_SMALL) ; (non CONFIG_SMALL)
CONRND1: CONRND1:
@@ -57,30 +12,13 @@ CONRND2:
.byte $68,$28,$B1,$46 .byte $68,$28,$B1,$46
RND: RND:
jsr SIGN jsr SIGN
.ifdef CONFIG_CBM_ALL
bmi L3F01
bne LDF63
lda ENTROPY
sta FAC+1
lda ENTROPY+4
sta FAC+2
lda ENTROPY+1
sta FAC+3
lda ENTROPY+5
sta FAC+4
jmp LDF88
LDF63:
.else
tax tax
bmi L3F01 bmi L3F01
.endif
lda #<RNDSEED lda #<RNDSEED
ldy #>RNDSEED ldy #>RNDSEED
jsr LOAD_FAC_FROM_YA jsr LOAD_FAC_FROM_YA
.ifndef CONFIG_CBM_ALL
txa txa
beq RTS19 beq RTS19
.endif
lda #<CONRND1 lda #<CONRND1
ldy #>CONRND1 ldy #>CONRND1
jsr FMULT jsr FMULT
@@ -92,13 +30,6 @@ L3F01:
lda FAC+1 lda FAC+1
sta FAC_LAST sta FAC_LAST
stx FAC+1 stx FAC+1
.ifdef CONFIG_CBM_ALL
ldx FAC+2
lda FAC+3
sta FAC+2
stx FAC+3
LDF88:
.endif
lda #$00 lda #$00
sta FACSIGN sta FACSIGN
lda FAC lda FAC
@@ -110,7 +41,6 @@ LDF88:
ldy #>RNDSEED ldy #>RNDSEED
GOMOVMF: GOMOVMF:
jmp STORE_FAC_AT_YX_ROUNDED jmp STORE_FAC_AT_YX_ROUNDED
.endif
.segment "CHRGET" .segment "CHRGET"
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
@@ -120,16 +50,6 @@ GOMOVMF:
; (on all non-CONFIG_SMALL) ; (on all non-CONFIG_SMALL)
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
GENERIC_RNDSEED: GENERIC_RNDSEED:
.ifndef KBD
; random number seed ; random number seed
.ifdef CONFIG_SMALL
.byte $80,$4F,$C7,$52
.else
.ifdef CONFIG_11
.byte $80,$4F,$C7,$52,$58 .byte $80,$4F,$C7,$52,$58
.else
.byte $80,$4F,$C7,$52,$59
.endif
.endif
.endif
GENERIC_CHRGET_END: GENERIC_CHRGET_END:
-63
View File
@@ -86,13 +86,8 @@ L32AA:
L32B6: L32B6:
stx STRNG2+1 stx STRNG2+1
lda STRNG1+1 lda STRNG1+1
.ifdef CONFIG_NO_INPUTBUFFER_ZP
beq LD399 beq LD399
cmp #>INPUTBUFFER cmp #>INPUTBUFFER
.elseif .def(AIM65)
beq LD399
cmp #$01
.endif
bne PUTNEW bne PUTNEW
LD399: LD399:
tya tya
@@ -124,9 +119,7 @@ PUTEMP:
ldy #$00 ldy #$00
stx FAC_LAST-1 stx FAC_LAST-1
sty FAC_LAST sty FAC_LAST
.ifdef CONFIG_2
sty FACEXTENSION sty FACEXTENSION
.endif
dey dey
sty VALTYP sty VALTYP
stx LASTPT stx LASTPT
@@ -183,22 +176,14 @@ L3311:
; BELOW STRING AREA DOWN TO STREND. ; BELOW STRING AREA DOWN TO STREND.
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
GARBAG: GARBAG:
.ifdef CONST_MEMSIZ
ldx #<CONST_MEMSIZ
lda #>CONST_MEMSIZ
.else
ldx MEMSIZ ldx MEMSIZ
lda MEMSIZ+1 lda MEMSIZ+1
.endif
FINDHIGHESTSTRING: FINDHIGHESTSTRING:
stx FRETOP stx FRETOP
sta FRETOP+1 sta FRETOP+1
ldy #$00 ldy #$00
sty FNCNAM+1 sty FNCNAM+1
.ifdef CONFIG_2
sty FNCNAM ; GC bugfix! sty FNCNAM ; GC bugfix!
.endif
lda STREND lda STREND
ldx STREND+1 ldx STREND+1
sta LOWTR sta LOWTR
@@ -244,14 +229,10 @@ L336B:
L3376: L3376:
sta INDEX sta INDEX
stx INDEX+1 stx INDEX+1
.ifdef CONFIG_SMALL
ldy #$01
.else
ldy #$00 ldy #$00
lda (INDEX),y lda (INDEX),y
tax tax
iny iny
.endif
lda (INDEX),y lda (INDEX),y
php php
iny iny
@@ -264,21 +245,13 @@ L3376:
sta HIGHDS+1 sta HIGHDS+1
plp plp
bpl L3367 bpl L3367
.ifndef CONFIG_SMALL
txa txa
bmi L3367 bmi L3367
.endif
iny iny
lda (INDEX),y lda (INDEX),y
.ifdef CONFIG_CBM1_PATCHES
jsr LE7F3 ; XXX patch, call into screen editor
.else
.ifdef CONFIG_11
ldy #$00 ; GC bugfix ldy #$00 ; GC bugfix
.endif
asl a asl a
adc #$05 adc #$05
.endif
adc INDEX adc INDEX
sta INDEX sta INDEX
bcc L33A7 bcc L33A7
@@ -298,10 +271,8 @@ L33B1:
; PROCESS A SIMPLE VARIABLE ; PROCESS A SIMPLE VARIABLE
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
CHECK_SIMPLE_VARIABLE: CHECK_SIMPLE_VARIABLE:
.ifndef CONFIG_SMALL
lda (INDEX),y lda (INDEX),y
bmi CHECK_BUMP bmi CHECK_BUMP
.endif
iny iny
lda (INDEX),y lda (INDEX),y
bpl CHECK_BUMP bpl CHECK_BUMP
@@ -360,19 +331,11 @@ L33FA:
; TO TOP AND GO BACK FOR ANOTHER ; TO TOP AND GO BACK FOR ANOTHER
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
MOVE_HIGHEST_STRING_TO_TOP: MOVE_HIGHEST_STRING_TO_TOP:
.ifdef CONFIG_2
lda FNCNAM+1 ; GC bugfix lda FNCNAM+1 ; GC bugfix
ora FNCNAM ora FNCNAM
.else
ldx FNCNAM+1
.endif
beq L33FA beq L33FA
lda Z52 lda Z52
.ifndef CONFIG_10A
sbc #$03
.else
and #$04 and #$04
.endif
lsr a lsr a
tay tay
sta Z52 sta Z52
@@ -531,11 +494,7 @@ L34CD:
; RELEASE TEMPORARY DESCRIPTOR IF Y,A = LASTPT ; RELEASE TEMPORARY DESCRIPTOR IF Y,A = LASTPT
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
FRETMS: FRETMS:
.ifdef KBD
cpy #$00
.else
cpy LASTPT+1 cpy LASTPT+1
.endif
bne L34E2 bne L34E2
cmp LASTPT cmp LASTPT
bne L34E2 bne L34E2
@@ -620,9 +579,7 @@ MIDSTR:
jsr GETBYT jsr GETBYT
L353F: L353F:
jsr SUBSTRING_SETUP jsr SUBSTRING_SETUP
.ifdef CONFIG_2
beq GOIQ beq GOIQ
.endif
dex dex
txa txa
pha pha
@@ -644,15 +601,9 @@ L353F:
SUBSTRING_SETUP: SUBSTRING_SETUP:
jsr CHKCLS jsr CHKCLS
pla pla
.ifndef CONFIG_11
sta JMPADRS+1
pla
sta JMPADRS+2
.else
tay tay
pla pla
sta Z52 sta Z52
.endif
pla pla
pla pla
pla pla
@@ -661,23 +612,13 @@ SUBSTRING_SETUP:
sta DSCPTR sta DSCPTR
pla pla
sta DSCPTR+1 sta DSCPTR+1
.ifdef CONFIG_11
lda Z52 lda Z52
pha pha
tya tya
pha pha
.endif
ldy #$00 ldy #$00
txa txa
.ifndef CONFIG_2
beq GOIQ
.endif
.ifndef CONFIG_11
inc JMPADRS+1
jmp (JMPADRS+1)
.else
rts rts
.endif
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; "LEN" FUNCTION ; "LEN" FUNCTION
@@ -707,11 +648,7 @@ ASC:
ldy #$00 ldy #$00
lda (INDEX),y lda (INDEX),y
tay tay
.ifndef CONFIG_11A
jmp SNGFLT1
.else
jmp SNGFLT jmp SNGFLT
.endif
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
GOIQ: GOIQ:
jmp IQERR jmp IQERR
-60
View File
@@ -10,73 +10,33 @@
keyword_rts "INPUT", INPUT keyword_rts "INPUT", INPUT
keyword_rts "DIM", DIM keyword_rts "DIM", DIM
keyword_rts "READ", READ keyword_rts "READ", READ
.ifdef APPLE
keyword_rts "PLT", PLT
.else
keyword_rts "LET", LET keyword_rts "LET", LET
.endif
keyword_rts "GOTO", GOTO, TOKEN_GOTO keyword_rts "GOTO", GOTO, TOKEN_GOTO
keyword_rts "RUN", RUN keyword_rts "RUN", RUN
keyword_rts "IF", IF keyword_rts "IF", IF
keyword_rts "RESTORE", RESTORE keyword_rts "RESTORE", RESTORE
keyword_rts "GOSUB", GOSUB, TOKEN_GOSUB keyword_rts "GOSUB", GOSUB, TOKEN_GOSUB
keyword_rts "RETURN", POP keyword_rts "RETURN", POP
.ifdef APPLE
keyword_rts "TEX", TEX, TOKEN_REM
.else
keyword_rts "REM", REM, TOKEN_REM keyword_rts "REM", REM, TOKEN_REM
.endif
keyword_rts "STOP", STOP keyword_rts "STOP", STOP
keyword_rts "ON", ON keyword_rts "ON", ON
.ifdef CONFIG_NULL
keyword_rts "NULL", NULL
.endif
.ifdef KBD
keyword_rts "PLOD", PLOD
keyword_rts "PSAV", PSAV
keyword_rts "VLOD", VLOD
keyword_rts "VSAV", VSAV
.endif
.ifndef CONFIG_NO_POKE
keyword_rts "WAIT", WAIT keyword_rts "WAIT", WAIT
.endif
.ifndef KBD
keyword_rts "LOAD", LOAD
keyword_rts "SAVE", SAVE
.endif
.ifdef CONFIG_CBM_ALL
keyword_rts "VERIFY", VERIFY
.endif
keyword_rts "DEF", DEF keyword_rts "DEF", DEF
.ifdef KBD
keyword_rts "SLOD", SLOD
.endif
.ifndef CONFIG_NO_POKE
keyword_rts "POKE", POKE keyword_rts "POKE", POKE
.endif
.ifdef CONFIG_FILE .ifdef CONFIG_FILE
keyword_rts "PRINT#", PRINTH keyword_rts "PRINT#", PRINTH
.endif .endif
keyword_rts "PRINT", PRINT, TOKEN_PRINT keyword_rts "PRINT", PRINT, TOKEN_PRINT
keyword_rts "CONT", CONT keyword_rts "CONT", CONT
keyword_rts "LIST", LIST keyword_rts "LIST", LIST
.ifdef CONFIG_CBM_ALL
keyword_rts "CLR", CLEAR
.else
keyword_rts "CLEAR", CLEAR keyword_rts "CLEAR", CLEAR
.endif
.ifdef CONFIG_FILE .ifdef CONFIG_FILE
keyword_rts "CMD", CMD keyword_rts "CMD", CMD
keyword_rts "SYS", SYS keyword_rts "SYS", SYS
keyword_rts "OPEN", OPEN keyword_rts "OPEN", OPEN
keyword_rts "CLOSE", CLOSE keyword_rts "CLOSE", CLOSE
.endif .endif
.ifndef CONFIG_SMALL
keyword_rts "GET", GET keyword_rts "GET", GET
.endif
.ifdef KBD
keyword_rts "PRT", PRT
.endif
keyword_rts "NEW", NEW keyword_rts "NEW", NEW
count_tokens count_tokens
@@ -92,11 +52,7 @@
keyword "-", TOKEN_MINUS keyword "-", TOKEN_MINUS
keyword "*" keyword "*"
keyword "/" keyword "/"
.ifdef KBD
keyword "#"
.else
keyword "^" keyword "^"
.endif
keyword "AND" keyword "AND"
keyword "OR" keyword "OR"
keyword ">", TOKEN_GREATER keyword ">", TOKEN_GREATER
@@ -109,16 +65,7 @@ UNFNC:
keyword_addr "SGN", SGN, TOKEN_SGN keyword_addr "SGN", SGN, TOKEN_SGN
keyword_addr "INT", INT keyword_addr "INT", INT
keyword_addr "ABS", ABS keyword_addr "ABS", ABS
.ifdef KBD
keyword_addr "VER", VER
.endif
.ifndef CONFIG_NO_POKE
.ifdef CONFIG_RAM
keyword_addr "USR", IQERR
.else
keyword_addr "USR", USR, TOKEN_USR keyword_addr "USR", USR, TOKEN_USR
.endif
.endif
keyword_addr "FRE", FRE keyword_addr "FRE", FRE
keyword_addr "POS", POS keyword_addr "POS", POS
keyword_addr "SQR", SQR keyword_addr "SQR", SQR
@@ -137,12 +84,7 @@ UNFNC_TAN:
.segment "VECTORS" .segment "VECTORS"
UNFNC_ATN: UNFNC_ATN:
keyword_addr "ATN", ATN keyword_addr "ATN", ATN
.ifdef KBD
keyword_addr "GETC", GETC
.endif
.ifndef CONFIG_NO_POKE
keyword_addr "PEEK", PEEK keyword_addr "PEEK", PEEK
.endif
keyword_addr "LEN", LEN keyword_addr "LEN", LEN
keyword_addr "STR$", STR keyword_addr "STR$", STR
keyword_addr "VAL", VAL keyword_addr "VAL", VAL
@@ -151,9 +93,7 @@ UNFNC_ATN:
keyword_addr "LEFT$", LEFTSTR, TOKEN_LEFTSTR keyword_addr "LEFT$", LEFTSTR, TOKEN_LEFTSTR
keyword_addr "RIGHT$", RIGHTSTR keyword_addr "RIGHT$", RIGHTSTR
keyword_addr "MID$", MIDSTR keyword_addr "MID$", MIDSTR
.ifdef CONFIG_2
keyword "GO", TOKEN_GO keyword "GO", TOKEN_GO
.endif
.segment "KEYWORDS" .segment "KEYWORDS"
.byte 0 .byte 0
-43
View File
@@ -1,6 +1,5 @@
.segment "CODE" .segment "CODE"
.ifndef SYM1
SIN_COS_TAN_ATN: SIN_COS_TAN_ATN:
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; "COS" FUNCTION ; "COS" FUNCTION
@@ -93,18 +92,6 @@ TAN1:
jmp SIN1 jmp SIN1
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
.ifdef CONFIG_SMALL
CON_PI_HALF:
.byte $81,$49,$0F,$DB
CON_PI_DOUB:
.byte $83,$49,$0F,$DB
QUARTER:
.byte $7F,$00,$00,$00
POLY_SIN:
.byte $04,$86,$1E,$D7,$FB,$87,$99,$26
.byte $65,$87,$23,$34,$58,$86,$A5,$5D
.byte $E1,$83,$49,$0F,$DB
.else
CON_PI_HALF: CON_PI_HALF:
.byte $81,$49,$0F,$DA,$A2 .byte $81,$49,$0F,$DA,$A2
CON_PI_DOUB: CON_PI_DOUB:
@@ -116,22 +103,11 @@ POLY_SIN:
.byte $07,$FB,$F8,$87,$99,$68,$89,$01 .byte $07,$FB,$F8,$87,$99,$68,$89,$01
.byte $87,$23,$35,$DF,$E1,$86,$A5,$5D .byte $87,$23,$35,$DF,$E1,$86,$A5,$5D
.byte $E7,$28,$83,$49,$0F,$DA,$A2 .byte $E7,$28,$83,$49,$0F,$DA,$A2
.ifndef CONFIG_11
; no easter egg text before BASIC 1.1
.elseif !.def(CONFIG_2A)
; ASCII encoded easter egg
MICROSOFT:
.byte $A6,$D3,$C1,$C8,$D4,$C8,$D5,$C4
.byte $CE,$CA
.else
; PET encoded easter egg text since CBM2 ; PET encoded easter egg text since CBM2
MICROSOFT: MICROSOFT:
.byte $A1,$54,$46,$8F,$13,$8F,$52,$43 .byte $A1,$54,$46,$8F,$13,$8F,$52,$43
.byte $89,$CD .byte $89,$CD
.endif
.endif
.ifndef AIM65
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; "ATN" FUNCTION ; "ATN" FUNCTION
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
@@ -171,18 +147,6 @@ L4002:
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
POLY_ATN: POLY_ATN:
.ifdef CONFIG_SMALL
.byte $08
.byte $78,$3A,$C5,$37
.byte $7B,$83,$A2,$5C
.byte $7C,$2E,$DD,$4D
.byte $7D,$99,$B0,$1E
.byte $7D,$59,$ED,$24
.byte $7E,$91,$72,$00
.byte $7E,$4C,$B9,$73
.byte $7F,$AA,$AA,$53
.byte $81,$00,$00,$00
.else
.byte $0B .byte $0B
.byte $76,$B3,$83,$BD,$D3 .byte $76,$B3,$83,$BD,$D3
.byte $79,$1E,$F4,$A6,$F5 .byte $79,$1E,$F4,$A6,$F5
@@ -196,10 +160,3 @@ POLY_ATN:
.byte $7E,$4C,$CC,$91,$C7 .byte $7E,$4C,$CC,$91,$C7
.byte $7F,$AA,$AA,$AA,$13 .byte $7F,$AA,$AA,$AA,$13
.byte $81,$00,$00,$00,$00 .byte $81,$00,$00,$00,$00
.endif
.if .def(CONFIG_11A) && (!.def(CONFIG_2))
.byte $00 ; XXX
.endif
.endif
.endif
-38
View File
@@ -42,9 +42,7 @@ SYNERR3:
NAMOK: NAMOK:
ldx #$00 ldx #$00
stx VALTYP stx VALTYP
.ifndef CONFIG_SMALL
stx VALTYP+1 stx VALTYP+1
.endif
jsr CHRGET jsr CHRGET
bcc L2ECD bcc L2ECD
jsr ISLETC jsr ISLETC
@@ -58,14 +56,9 @@ L2ECE:
bcs L2ECE bcs L2ECE
L2ED8: L2ED8:
cmp #$24 cmp #$24
.ifdef CONFIG_SMALL
bne L2EF9
.else
bne L2EE2 bne L2EE2
.endif
lda #$FF lda #$FF
sta VALTYP sta VALTYP
.ifndef CONFIG_SMALL
bne L2EF2 bne L2EF2
L2EE2: L2EE2:
cmp #$25 cmp #$25
@@ -77,7 +70,6 @@ L2EE2:
ora VARNAM ora VARNAM
sta VARNAM sta VARNAM
L2EF2: L2EF2:
.endif
txa txa
ora #$80 ora #$80
tax tax
@@ -143,22 +135,12 @@ NAMENOTFOUND:
pha pha
cmp #<FRM_VARIABLE_CALL cmp #<FRM_VARIABLE_CALL
bne MAKENEWVARIABLE bne MAKENEWVARIABLE
.ifdef CONFIG_SAFE_NAMENOTFOUND
tsx
lda STACK+2,x
cmp #>FRM_VARIABLE_CALL
bne MAKENEWVARIABLE
.endif
LD015: LD015:
lda #<C_ZERO lda #<C_ZERO
ldy #>C_ZERO ldy #>C_ZERO
rts rts
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
.ifndef CONFIG_2
C_ZERO:
.byte $00,$00
.endif
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; MAKE A NEW SIMPLE VARIABLE ; MAKE A NEW SIMPLE VARIABLE
@@ -167,24 +149,6 @@ C_ZERO:
; ENTER 7-BYTE VARIABLE DATA IN THE HOLE ; ENTER 7-BYTE VARIABLE DATA IN THE HOLE
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
MAKENEWVARIABLE: MAKENEWVARIABLE:
.ifdef CONFIG_CBM_ALL
lda VARNAM
ldy VARNAM+1
cmp #$54
bne LD02F
cpy #$C9
beq LD015
cpy #$49
bne LD02F
LD02C:
jmp SYNERR
LD02F:
cmp #$53
bne LD037
cpy #$54
beq LD02C
LD037:
.endif
lda ARYTAB lda ARYTAB
ldy ARYTAB+1 ldy ARYTAB+1
sta LOWTR sta LOWTR
@@ -221,10 +185,8 @@ L2F68:
sta (LOWTR),y sta (LOWTR),y
iny iny
sta (LOWTR),y sta (LOWTR),y
.ifndef CONFIG_SMALL
iny iny
sta (LOWTR),y sta (LOWTR),y
.endif
; ---------------------------------------------------------------------------- ; ----------------------------------------------------------------------------
; PUT ADDRESS OF VALUE OF VARIABLE IN VARPNT AND Y,A ; PUT ADDRESS OF VALUE OF VARIABLE IN VARPNT AND Y,A
+2 -4
View File
@@ -1,5 +1,3 @@
.segment "WOZMON"
XAML = $24 ; Last "opened" location Low XAML = $24 ; Last "opened" location Low
XAMH = $25 ; Last "opened" location High XAMH = $25 ; Last "opened" location High
STL = $26 ; Store address Low STL = $26 ; Store address Low
@@ -27,7 +25,7 @@ ESCAPE:
JSR ECHO ; Output it. JSR ECHO ; Output it.
GETLINE: GETLINE:
LDA #$0D ; Send CR LDA #$0A ; Send LF
JSR ECHO JSR ECHO
LDY #$01 ; Initialize text index. LDY #$01 ; Initialize text index.
@@ -120,7 +118,7 @@ SETADR: LDA L-1,X ; Copy hex data to
NXTPRNT: NXTPRNT:
BNE PRDATA ; NE means no address to print. BNE PRDATA ; NE means no address to print.
LDA #$0D ; CR. LDA #$0A ; LF.
JSR ECHO ; Output it. JSR ECHO ; Output it.
LDA XAMH ; 'Examine index' high-order byte. LDA XAMH ; 'Examine index' high-order byte.
JSR PRBYTE ; Output it in hex format. JSR PRBYTE ; Output it in hex format.
+5 -50
View File
@@ -2,7 +2,7 @@
.feature org_per_seg .feature org_per_seg
.zeropage .zeropage
.org ZP_START1 .org $02
GORESTART: GORESTART:
.res 3 .res 3
@@ -13,31 +13,21 @@ GOAYINT:
GOGIVEAYF: GOGIVEAYF:
.res 2 .res 2
.org ZP_START2 .org $0C
Z15: Z15:
.res 1 .res 1
.ifndef POSX; allow override
POSX: POSX:
.endif
.res 1 .res 1
.ifndef Z17; allow override
Z17: Z17:
.endif
.res 1 .res 1
.ifndef Z18; allow override
Z18: Z18:
.endif
.res 1 .res 1
LINNUM: LINNUM:
.ifndef TXPSV; allow override
TXPSV: TXPSV:
.endif
.res 2 .res 2
.ifndef INPUTBUFFER; allow override INPUTBUFFER = $0200
INPUTBUFFER:
.endif
.org ZP_START3 .org $12
CHARAC: CHARAC:
.res 1 .res 1
@@ -48,11 +38,7 @@ EOLPNTR:
DIMFLG: DIMFLG:
.res 1 .res 1
VALTYP: VALTYP:
.ifdef CONFIG_SMALL
.res 1
.else
.res 2 .res 2
.endif
DATAFLG: DATAFLG:
.res 1 .res 1
SUBFLG: SUBFLG:
@@ -64,7 +50,7 @@ CPRMASK:
Z14: Z14:
.res 1 .res 1
.org ZP_START4 .org $1D
TEMPPT: TEMPPT:
.res 1 .res 1
@@ -119,44 +105,29 @@ FNCNAM:
TEMP3: TEMP3:
.res 2 .res 2
DSCPTR: DSCPTR:
.ifdef CONFIG_SMALL
.res 2
.else
.res 3 .res 3
.endif
DSCLEN: DSCLEN:
.res 2 .res 2
.ifndef JMPADRS ; allow override
JMPADRS := DSCLEN + 1 JMPADRS := DSCLEN + 1
.endif
Z52: Z52:
.res 1 .res 1
ARGEXTENSION: ARGEXTENSION:
.ifndef CONFIG_SMALL
.res 1 .res 1
.endif
TEMP1: TEMP1:
.res 1 .res 1
HIGHDS: HIGHDS:
.res 2 .res 2
HIGHTR: HIGHTR:
.res 2 .res 2
.ifndef CONFIG_SMALL
TEMP2: TEMP2:
.res 1 .res 1
.endif
INDX: INDX:
TMPEXP: TMPEXP:
.ifdef CONFIG_SMALL
TEMP2:
.endif
.res 1 .res 1
EXPON: EXPON:
.res 1 .res 1
LOWTR: LOWTR:
.ifndef LOWTRX ; allow override
LOWTRX: LOWTRX:
.endif
.res 1 .res 1
EXPSGN: EXPSGN:
.res 1 .res 1
@@ -180,24 +151,8 @@ SGNCPR = STRNG1
FACEXTENSION = STRNG1+1 FACEXTENSION = STRNG1+1
STRNG2: STRNG2:
.res 2 .res 2
.ifdef AIM65
ATN:
.res 3
ZBE:
.res 1
.endif
.ifdef SYM1
USR1:
.res 3
USR2:
.res 3
USR3:
.res 3
.endif
CHRGET: CHRGET:
TXTPTR = <(GENERIC_TXTPTR-GENERIC_CHRGET + CHRGET) TXTPTR = <(GENERIC_TXTPTR-GENERIC_CHRGET + CHRGET)
CHRGOT = <(GENERIC_CHRGOT-GENERIC_CHRGET + CHRGET) CHRGOT = <(GENERIC_CHRGOT-GENERIC_CHRGET + CHRGET)
CHRGOT2 = <(GENERIC_CHRGOT2-GENERIC_CHRGET + CHRGET) CHRGOT2 = <(GENERIC_CHRGOT2-GENERIC_CHRGET + CHRGET)
RNDSEED = <(GENERIC_RNDSEED-GENERIC_CHRGET + CHRGET) RNDSEED = <(GENERIC_RNDSEED-GENERIC_CHRGET + CHRGET)
+1
View File
@@ -6,6 +6,7 @@
int putChar(uint8_t c) { int putChar(uint8_t c) {
int _c = putchar(c); int _c = putchar(c);
fflush(stdout); fflush(stdout);
return _c; return _c;
} }
+1
View File
@@ -46,6 +46,7 @@ int main(void) {
printf("6502PC Emulator with MS Basic\n"); printf("6502PC Emulator with MS Basic\n");
printf("CTRL + G to exit\n"); printf("CTRL + G to exit\n");
printf("DF6FR to jump to BASIC\n");
clock_gettime(CLOCK_MONOTONIC, &emulationStart); clock_gettime(CLOCK_MONOTONIC, &emulationStart);
+1 -1
View File
@@ -7,7 +7,7 @@
uint8_t rom[ROM_SIZE] = {0}; uint8_t rom[ROM_SIZE] = {0};
void initRom(uint8_t *rom) { void initRom(uint8_t *rom) {
FILE *fp = fopen("rom/tmp/kilian.bin", "rb"); FILE *fp = fopen("rom/tmp/rom.bin", "rb");
if (!fp) { if (!fp) {
perror("fopen"); perror("fopen");