mirror of
https://github.com/mist64/msbasic.git
synced 2024-12-22 08:29:21 +00:00
119 lines
2.7 KiB
ArmAsm
119 lines
2.7 KiB
ArmAsm
.segment "CODE"
|
|
|
|
.ifndef CONFIG_NO_POKE
|
|
; ----------------------------------------------------------------------------
|
|
; EVALUATE "EXP1,EXP2"
|
|
;
|
|
; CONVERT EXP1 TO 16-BIT NUMBER IN LINNUM
|
|
; CONVERT EXP2 TO 8-BIT NUMBER IN X-REG
|
|
; ----------------------------------------------------------------------------
|
|
GTNUM:
|
|
jsr FRMNUM
|
|
jsr GETADR
|
|
|
|
; ----------------------------------------------------------------------------
|
|
; EVALUATE ",EXPRESSION"
|
|
; CONVERT EXPRESSION TO SINGLE BYTE IN X-REG
|
|
; ----------------------------------------------------------------------------
|
|
COMBYTE:
|
|
jsr CHKCOM
|
|
jmp GETBYT
|
|
|
|
; ----------------------------------------------------------------------------
|
|
; CONVERT (FAC) TO A 16-BIT VALUE IN LINNUM
|
|
; ----------------------------------------------------------------------------
|
|
GETADR:
|
|
lda FACSIGN
|
|
.ifdef APPLE
|
|
nop ; PATCH
|
|
nop
|
|
.else
|
|
bmi GOIQ
|
|
.endif
|
|
lda FAC
|
|
cmp #$91
|
|
bcs GOIQ
|
|
jsr QINT
|
|
lda FAC_LAST-1
|
|
ldy FAC_LAST
|
|
sty LINNUM
|
|
sta LINNUM+1
|
|
rts
|
|
|
|
; ----------------------------------------------------------------------------
|
|
; "PEEK" FUNCTION
|
|
; ----------------------------------------------------------------------------
|
|
PEEK:
|
|
.ifdef CONFIG_PEEK_SAVE_LINNUM
|
|
lda LINNUM+1
|
|
pha
|
|
lda LINNUM
|
|
pha
|
|
.endif
|
|
jsr GETADR
|
|
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
|
|
tay
|
|
.ifdef CONFIG_PEEK_SAVE_LINNUM
|
|
pla
|
|
sta LINNUM
|
|
pla
|
|
sta LINNUM+1
|
|
.endif
|
|
LD6F6:
|
|
jmp SNGFLT
|
|
|
|
; ----------------------------------------------------------------------------
|
|
; "POKE" STATEMENT
|
|
; ----------------------------------------------------------------------------
|
|
POKE:
|
|
jsr GTNUM
|
|
txa
|
|
ldy #$00
|
|
sta (LINNUM),y
|
|
rts
|
|
|
|
; ----------------------------------------------------------------------------
|
|
; "WAIT" STATEMENT
|
|
; ----------------------------------------------------------------------------
|
|
WAIT:
|
|
jsr GTNUM
|
|
stx FORPNT
|
|
ldx #$00
|
|
jsr CHRGOT
|
|
.ifdef CONFIG_EASTER_EGG
|
|
beq EASTER_EGG
|
|
.else
|
|
beq L3628
|
|
.endif
|
|
jsr COMBYTE
|
|
L3628:
|
|
stx FORPNT+1
|
|
ldy #$00
|
|
L362C:
|
|
lda (LINNUM),y
|
|
eor FORPNT+1
|
|
and FORPNT
|
|
beq L362C
|
|
RTS3:
|
|
rts
|
|
.endif /* KBD */
|