243 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			243 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
.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
 | 
						|
LDZR:
 | 
						|
        lda     #<C_ZERO
 | 
						|
        ldy     #>C_ZERO
 | 
						|
        rts
 | 
						|
 | 
						|
; ----------------------------------------------------------------------------
 | 
						|
.ifndef CONFIG_2
 | 
						|
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    ; T
 | 
						|
        bne     LD02F
 | 
						|
        cpy     #$C9    ; I$
 | 
						|
        beq     LDZR
 | 
						|
        cpy     #$49    ; I
 | 
						|
        bne     LD02F
 | 
						|
LD02C:
 | 
						|
        jmp     SYNERR
 | 
						|
LD02F:
 | 
						|
        cmp     #$53    ; S
 | 
						|
        bne     LD037
 | 
						|
        cpy     #$54    ; T
 | 
						|
        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
 |