mirror of
https://github.com/mist64/msbasic.git
synced 2026-04-25 07:17:34 +00:00
separation...
This commit is contained in:
@@ -0,0 +1,242 @@
|
||||
.segment "CODE"
|
||||
|
||||
; ----------------------------------------------------------------------------
|
||||
; "DIM" STATEMENT
|
||||
; ----------------------------------------------------------------------------
|
||||
NXDIM:
|
||||
jsr CHKCOM
|
||||
DIM:
|
||||
tax
|
||||
jsr PTRGET2
|
||||
jsr CHRGOT
|
||||
bne NXDIM
|
||||
rts
|
||||
|
||||
; ----------------------------------------------------------------------------
|
||||
; PTRGET -- GENERAL VARIABLE SCAN
|
||||
;
|
||||
; SCANS VARIABLE NAME AT TXTPTR, AND SEARCHES THE
|
||||
; VARTAB AND ARYTAB FOR THE NAME.
|
||||
; IF NOT FOUND, CREATE VARIABLE OF APPROPRIATE TYPE.
|
||||
; RETURN WITH ADDRESS IN VARPNT AND Y,A
|
||||
;
|
||||
; ACTUAL ACTIVITY CONTROLLED SOMEWHAT BY TWO FLAGS:
|
||||
; DIMFLG -- NONZERO IF CALLED FROM "DIM"
|
||||
; ELSE = 0
|
||||
;
|
||||
; SUBFLG -- = $00
|
||||
; = $40 IF CALLED FROM "GETARYPT"
|
||||
; ----------------------------------------------------------------------------
|
||||
PTRGET:
|
||||
ldx #$00
|
||||
jsr CHRGOT
|
||||
PTRGET2:
|
||||
stx DIMFLG
|
||||
PTRGET3:
|
||||
sta VARNAM
|
||||
jsr CHRGOT
|
||||
jsr ISLETC
|
||||
bcs NAMOK
|
||||
SYNERR3:
|
||||
jmp SYNERR
|
||||
NAMOK:
|
||||
ldx #$00
|
||||
stx VALTYP
|
||||
.ifndef CONFIG_SMALL
|
||||
stx VALTYP+1
|
||||
.endif
|
||||
jsr CHRGET
|
||||
bcc L2ECD
|
||||
jsr ISLETC
|
||||
bcc L2ED8
|
||||
L2ECD:
|
||||
tax
|
||||
L2ECE:
|
||||
jsr CHRGET
|
||||
bcc L2ECE
|
||||
jsr ISLETC
|
||||
bcs L2ECE
|
||||
L2ED8:
|
||||
cmp #$24
|
||||
.ifdef CONFIG_SMALL
|
||||
bne L2EF9
|
||||
.else
|
||||
bne L2EE2
|
||||
.endif
|
||||
lda #$FF
|
||||
sta VALTYP
|
||||
.ifndef CONFIG_SMALL
|
||||
bne L2EF2
|
||||
L2EE2:
|
||||
cmp #$25
|
||||
bne L2EF9
|
||||
lda SUBFLG
|
||||
bne SYNERR3
|
||||
lda #$80
|
||||
sta VALTYP+1
|
||||
ora VARNAM
|
||||
sta VARNAM
|
||||
L2EF2:
|
||||
.endif
|
||||
txa
|
||||
ora #$80
|
||||
tax
|
||||
jsr CHRGET
|
||||
L2EF9:
|
||||
stx VARNAM+1
|
||||
sec
|
||||
ora SUBFLG
|
||||
sbc #$28
|
||||
bne L2F05
|
||||
jmp ARRAY
|
||||
L2F05:
|
||||
lda #$00
|
||||
sta SUBFLG
|
||||
lda VARTAB
|
||||
ldx VARTAB+1
|
||||
ldy #$00
|
||||
L2F0F:
|
||||
stx LOWTR+1
|
||||
L2F11:
|
||||
sta LOWTR
|
||||
cpx ARYTAB+1
|
||||
bne L2F1B
|
||||
cmp ARYTAB
|
||||
beq NAMENOTFOUND
|
||||
L2F1B:
|
||||
lda VARNAM
|
||||
cmp (LOWTR),y
|
||||
bne L2F29
|
||||
lda VARNAM+1
|
||||
iny
|
||||
cmp (LOWTR),y
|
||||
beq SET_VARPNT_AND_YA
|
||||
dey
|
||||
L2F29:
|
||||
clc
|
||||
lda LOWTR
|
||||
adc #BYTES_PER_VARIABLE
|
||||
bcc L2F11
|
||||
inx
|
||||
bne L2F0F
|
||||
|
||||
; ----------------------------------------------------------------------------
|
||||
; CHECK IF (A) IS ASCII LETTER A-Z
|
||||
;
|
||||
; RETURN CARRY = 1 IF A-Z
|
||||
; = 0 IF NOT
|
||||
; ----------------------------------------------------------------------------
|
||||
ISLETC:
|
||||
cmp #$41
|
||||
bcc L2F3C
|
||||
sbc #$5B
|
||||
sec
|
||||
sbc #$A5
|
||||
L2F3C:
|
||||
rts
|
||||
|
||||
; ----------------------------------------------------------------------------
|
||||
; VARIABLE NOT FOUND, SO MAKE ONE
|
||||
; ----------------------------------------------------------------------------
|
||||
NAMENOTFOUND:
|
||||
pla
|
||||
pha
|
||||
cmp #<FRM_VARIABLE_CALL
|
||||
bne MAKENEWVARIABLE
|
||||
.ifdef CONFIG_SAFE_NAMENOTFOUND
|
||||
tsx
|
||||
lda STACK+2,x
|
||||
cmp #>FRM_VARIABLE_CALL
|
||||
bne MAKENEWVARIABLE
|
||||
.endif
|
||||
LD015:
|
||||
lda #<C_ZERO
|
||||
ldy #>C_ZERO
|
||||
rts
|
||||
|
||||
; ----------------------------------------------------------------------------
|
||||
.ifndef CBM2_KBD
|
||||
C_ZERO:
|
||||
.byte $00,$00
|
||||
.endif
|
||||
|
||||
; ----------------------------------------------------------------------------
|
||||
; MAKE A NEW SIMPLE VARIABLE
|
||||
;
|
||||
; MOVE ARRAYS UP 7 BYTES TO MAKE ROOM FOR NEW VARIABLE
|
||||
; ENTER 7-BYTE VARIABLE DATA IN THE HOLE
|
||||
; ----------------------------------------------------------------------------
|
||||
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
|
||||
ldy ARYTAB+1
|
||||
sta LOWTR
|
||||
sty LOWTR+1
|
||||
lda STREND
|
||||
ldy STREND+1
|
||||
sta HIGHTR
|
||||
sty HIGHTR+1
|
||||
clc
|
||||
adc #BYTES_PER_VARIABLE
|
||||
bcc L2F68
|
||||
iny
|
||||
L2F68:
|
||||
sta HIGHDS
|
||||
sty HIGHDS+1
|
||||
jsr BLTU
|
||||
lda HIGHDS
|
||||
ldy HIGHDS+1
|
||||
iny
|
||||
sta ARYTAB
|
||||
sty ARYTAB+1
|
||||
ldy #$00
|
||||
lda VARNAM
|
||||
sta (LOWTR),y
|
||||
iny
|
||||
lda VARNAM+1
|
||||
sta (LOWTR),y
|
||||
lda #$00
|
||||
iny
|
||||
sta (LOWTR),y
|
||||
iny
|
||||
sta (LOWTR),y
|
||||
iny
|
||||
sta (LOWTR),y
|
||||
iny
|
||||
sta (LOWTR),y
|
||||
.ifndef CONFIG_SMALL
|
||||
iny
|
||||
sta (LOWTR),y
|
||||
.endif
|
||||
|
||||
; ----------------------------------------------------------------------------
|
||||
; PUT ADDRESS OF VALUE OF VARIABLE IN VARPNT AND Y,A
|
||||
; ----------------------------------------------------------------------------
|
||||
SET_VARPNT_AND_YA:
|
||||
lda LOWTR
|
||||
clc
|
||||
adc #$02
|
||||
ldy LOWTR+1
|
||||
bcc L2F9E
|
||||
iny
|
||||
L2F9E:
|
||||
sta VARPNT
|
||||
sty VARPNT+1
|
||||
rts
|
||||
Reference in New Issue
Block a user