159 lines
3.8 KiB
ArmAsm
159 lines
3.8 KiB
ArmAsm
.segment "CODE"
|
|
|
|
; ----------------------------------------------------------------------------
|
|
; CONVERT LINE NUMBER
|
|
; ----------------------------------------------------------------------------
|
|
LINGET:
|
|
ldx #$00
|
|
stx LINNUM
|
|
stx LINNUM+1
|
|
L28BE:
|
|
bcs L28B7
|
|
sbc #$2F
|
|
sta CHARAC
|
|
lda LINNUM+1
|
|
sta INDEX
|
|
cmp #$19
|
|
bcs L28A0
|
|
; <<<<<DANGEROUS CODE>>>>>
|
|
; NOTE THAT IF (A) = $AB ON THE LINE ABOVE,
|
|
; ON.1 WILL COMPARE = AND CAUSE A CATASTROPHIC
|
|
; JUMP TO $22D9 (FOR GOTO), OR OTHER LOCATIONS
|
|
; FOR OTHER CALLS TO LINGET.
|
|
;
|
|
; YOU CAN SEE THIS IS YOU FIRST PUT "BRK" IN $22D9,
|
|
; THEN TYPE "GO TO 437761".
|
|
;
|
|
; ANY VALUE FROM 437760 THROUGH 440319 WILL CAUSE
|
|
; THE PROBLEM. ($AB00 - $ABFF)
|
|
; <<<<<DANGEROUS CODE>>>>>
|
|
lda LINNUM
|
|
asl a
|
|
rol INDEX
|
|
asl a
|
|
rol INDEX
|
|
adc LINNUM
|
|
sta LINNUM
|
|
lda INDEX
|
|
adc LINNUM+1
|
|
sta LINNUM+1
|
|
asl LINNUM
|
|
rol LINNUM+1
|
|
lda LINNUM
|
|
adc CHARAC
|
|
sta LINNUM
|
|
bcc L28EC
|
|
inc LINNUM+1
|
|
L28EC:
|
|
jsr CHRGET
|
|
jmp L28BE
|
|
|
|
; ----------------------------------------------------------------------------
|
|
; "LET" STATEMENT
|
|
;
|
|
; LET <VAR> = <EXP>
|
|
; <VAR> = <EXP>
|
|
; ----------------------------------------------------------------------------
|
|
LET:
|
|
jsr PTRGET
|
|
sta FORPNT
|
|
sty FORPNT+1
|
|
lda #TOKEN_EQUAL
|
|
jsr SYNCHR
|
|
lda VALTYP+1
|
|
pha
|
|
lda VALTYP
|
|
pha
|
|
jsr FRMEVL
|
|
pla
|
|
rol a
|
|
jsr CHKVAL
|
|
bne LETSTRING
|
|
pla
|
|
LET2:
|
|
bpl L2923
|
|
jsr ROUND_FAC
|
|
jsr AYINT
|
|
ldy #$00
|
|
lda FAC+3
|
|
sta (FORPNT),y
|
|
iny
|
|
lda FAC+4
|
|
sta (FORPNT),y
|
|
rts
|
|
L2923:
|
|
|
|
; ----------------------------------------------------------------------------
|
|
; REAL VARIABLE = EXPRESSION
|
|
; ----------------------------------------------------------------------------
|
|
jmp SETFOR
|
|
LETSTRING:
|
|
pla
|
|
|
|
; ----------------------------------------------------------------------------
|
|
; INSTALL STRING, DESCRIPTOR ADDRESS IS AT FAC+3,4
|
|
; ----------------------------------------------------------------------------
|
|
PUTSTR:
|
|
ldy #$02
|
|
lda (FAC_LAST-1),y
|
|
cmp FRETOP+1
|
|
bcc L2946
|
|
bne L2938
|
|
dey
|
|
lda (FAC_LAST-1),y
|
|
cmp FRETOP
|
|
bcc L2946
|
|
L2938:
|
|
ldy FAC_LAST
|
|
cpy VARTAB+1
|
|
bcc L2946
|
|
bne L294D
|
|
lda FAC_LAST-1
|
|
cmp VARTAB
|
|
bcs L294D
|
|
L2946:
|
|
lda FAC_LAST-1
|
|
ldy FAC_LAST
|
|
jmp L2963
|
|
L294D:
|
|
ldy #$00
|
|
lda (FAC_LAST-1),y
|
|
jsr STRINI
|
|
lda DSCPTR
|
|
ldy DSCPTR+1
|
|
sta STRNG1
|
|
sty STRNG1+1
|
|
jsr MOVINS
|
|
lda #FAC
|
|
ldy #$00
|
|
L2963:
|
|
sta DSCPTR
|
|
sty DSCPTR+1
|
|
jsr FRETMS
|
|
ldy #$00
|
|
lda (DSCPTR),y
|
|
sta (FORPNT),y
|
|
iny
|
|
lda (DSCPTR),y
|
|
sta (FORPNT),y
|
|
iny
|
|
lda (DSCPTR),y
|
|
sta (FORPNT),y
|
|
RET5:
|
|
rts
|
|
|
|
PRINTH:
|
|
jsr CMD
|
|
jmp LCAD6
|
|
CMD:
|
|
jsr GETBYT
|
|
beq LC98F
|
|
lda #$2C
|
|
jsr SYNCHR
|
|
LC98F:
|
|
php
|
|
jsr CHKOUT
|
|
stx CURDVC
|
|
plp
|
|
jmp PRINT
|