mirror of
https://github.com/mist64/msbasic.git
synced 2024-10-15 07:23:51 +00:00
216 lines
5.1 KiB
ArmAsm
216 lines
5.1 KiB
ArmAsm
.segment "CODE"
|
|
; ----------------------------------------------------------------------------
|
|
; "RUN" COMMAND
|
|
; ----------------------------------------------------------------------------
|
|
RUN:
|
|
bne L27CF
|
|
jmp SETPTRS
|
|
L27CF:
|
|
jsr CLEARC
|
|
jmp L27E9
|
|
|
|
; ----------------------------------------------------------------------------
|
|
; "GOSUB" STATEMENT
|
|
;
|
|
; LEAVES 7 BYTES ON STACK:
|
|
; 2 -- RETURN ADDRESS (NEWSTT)
|
|
; 2 -- TXTPTR
|
|
; 2 -- LINE #
|
|
; 1 -- GOSUB TOKEN
|
|
; ----------------------------------------------------------------------------
|
|
GOSUB:
|
|
lda #$03
|
|
jsr CHKMEM
|
|
lda TXTPTR+1
|
|
pha
|
|
lda TXTPTR
|
|
pha
|
|
lda CURLIN+1
|
|
pha
|
|
lda CURLIN
|
|
pha
|
|
lda #TOKEN_GOSUB
|
|
pha
|
|
L27E9:
|
|
jsr CHRGOT
|
|
jsr GOTO
|
|
jmp NEWSTT
|
|
|
|
; ----------------------------------------------------------------------------
|
|
; "GOTO" STATEMENT
|
|
; ALSO USED BY "RUN" AND "GOSUB"
|
|
; ----------------------------------------------------------------------------
|
|
GOTO:
|
|
jsr LINGET
|
|
jsr REMN
|
|
lda CURLIN+1
|
|
cmp LINNUM+1
|
|
bcs L2809
|
|
tya
|
|
sec
|
|
adc TXTPTR
|
|
ldx TXTPTR+1
|
|
bcc L280D
|
|
inx
|
|
bcs L280D
|
|
L2809:
|
|
lda TXTTAB
|
|
ldx TXTTAB+1
|
|
L280D:
|
|
.ifdef KBD
|
|
jsr LF457
|
|
bne UNDERR
|
|
.else
|
|
jsr FL1
|
|
bcc UNDERR
|
|
.endif
|
|
lda LOWTRX
|
|
sbc #$01
|
|
sta TXTPTR
|
|
lda LOWTRX+1
|
|
sbc #$00
|
|
sta TXTPTR+1
|
|
L281E:
|
|
rts
|
|
|
|
; ----------------------------------------------------------------------------
|
|
; "POP" AND "RETURN" STATEMENTS
|
|
; ----------------------------------------------------------------------------
|
|
POP:
|
|
bne L281E
|
|
lda #$FF
|
|
.ifdef CONFIG_2
|
|
sta FORPNT+1 ; bugfix, wrong in AppleSoft II
|
|
.else
|
|
sta FORPNT
|
|
.endif
|
|
jsr GTFORPNT
|
|
txs
|
|
cmp #TOKEN_GOSUB
|
|
beq RETURN
|
|
ldx #ERR_NOGOSUB
|
|
.byte $2C
|
|
UNDERR:
|
|
ldx #ERR_UNDEFSTAT
|
|
jmp ERROR
|
|
; ----------------------------------------------------------------------------
|
|
SYNERR2:
|
|
jmp SYNERR
|
|
; ----------------------------------------------------------------------------
|
|
RETURN:
|
|
pla
|
|
pla
|
|
sta CURLIN
|
|
pla
|
|
sta CURLIN+1
|
|
pla
|
|
sta TXTPTR
|
|
pla
|
|
sta TXTPTR+1
|
|
|
|
; ----------------------------------------------------------------------------
|
|
; "DATA" STATEMENT
|
|
; EXECUTED BY SKIPPING TO NEXT COLON OR EOL
|
|
; ----------------------------------------------------------------------------
|
|
DATA:
|
|
jsr DATAN
|
|
|
|
; ----------------------------------------------------------------------------
|
|
; ADD (Y) TO TXTPTR
|
|
; ----------------------------------------------------------------------------
|
|
ADDON:
|
|
tya
|
|
clc
|
|
adc TXTPTR
|
|
sta TXTPTR
|
|
bcc L2852
|
|
inc TXTPTR+1
|
|
L2852:
|
|
rts
|
|
|
|
; ----------------------------------------------------------------------------
|
|
; SCAN AHEAD TO NEXT ":" OR EOL
|
|
; ----------------------------------------------------------------------------
|
|
DATAN:
|
|
ldx #$3A
|
|
.byte $2C
|
|
REMN:
|
|
ldx #$00
|
|
stx CHARAC
|
|
ldy #$00
|
|
sty ENDCHR
|
|
L285E:
|
|
lda ENDCHR
|
|
ldx CHARAC
|
|
sta CHARAC
|
|
stx ENDCHR
|
|
L2866:
|
|
lda (TXTPTR),y
|
|
beq L2852
|
|
cmp ENDCHR
|
|
beq L2852
|
|
iny
|
|
cmp #$22
|
|
.ifndef CONFIG_11
|
|
beq L285E; old: swap & cont is faster
|
|
bne L2866
|
|
.else
|
|
bne L2866; new: cont is faster
|
|
beq L285E
|
|
.endif
|
|
|
|
; ----------------------------------------------------------------------------
|
|
; "IF" STATEMENT
|
|
; ----------------------------------------------------------------------------
|
|
IF:
|
|
jsr FRMEVL
|
|
jsr CHRGOT
|
|
cmp #TOKEN_GOTO
|
|
beq L2884
|
|
lda #TOKEN_THEN
|
|
jsr SYNCHR
|
|
L2884:
|
|
lda FAC
|
|
bne L288D
|
|
|
|
; ----------------------------------------------------------------------------
|
|
; "REM" STATEMENT, OR FALSE "IF" STATEMENT
|
|
; ----------------------------------------------------------------------------
|
|
REM:
|
|
jsr REMN
|
|
beq ADDON
|
|
L288D:
|
|
jsr CHRGOT
|
|
bcs L2895
|
|
jmp GOTO
|
|
L2895:
|
|
jmp EXECUTE_STATEMENT
|
|
|
|
; ----------------------------------------------------------------------------
|
|
; "ON" STATEMENT
|
|
;
|
|
; ON <EXP> GOTO <LIST>
|
|
; ON <EXP> GOSUB <LIST>
|
|
; ----------------------------------------------------------------------------
|
|
ON:
|
|
jsr GETBYT
|
|
pha
|
|
cmp #TOKEN_GOSUB
|
|
beq L28A4
|
|
L28A0:
|
|
cmp #TOKEN_GOTO
|
|
bne SYNERR2
|
|
L28A4:
|
|
dec FAC_LAST
|
|
bne L28AC
|
|
pla
|
|
jmp EXECUTE_STATEMENT1
|
|
L28AC:
|
|
jsr CHRGET
|
|
jsr LINGET
|
|
cmp #$2C
|
|
beq L28A4
|
|
pla
|
|
L28B7:
|
|
rts
|