mirror of
https://github.com/mist64/msbasic.git
synced 2024-12-12 03:29:52 +00:00
411 lines
7.4 KiB
ArmAsm
411 lines
7.4 KiB
ArmAsm
.segment "CODE"
|
|
|
|
.ifdef AIM65
|
|
PRINT:
|
|
lda PRIFLG
|
|
sta ZBE
|
|
jsr L297E
|
|
LB8B1:
|
|
lda ZBE
|
|
sta PRIFLG
|
|
rts
|
|
.endif
|
|
|
|
PRSTRING:
|
|
jsr STRPRT
|
|
L297E:
|
|
jsr CHRGOT
|
|
|
|
; ----------------------------------------------------------------------------
|
|
; "PRINT" STATEMENT
|
|
; ----------------------------------------------------------------------------
|
|
.ifndef AIM65
|
|
PRINT:
|
|
.endif
|
|
beq CRDO
|
|
PRINT2:
|
|
beq L29DD
|
|
.ifdef AIM65
|
|
jsr LB89D
|
|
beq L29DD
|
|
.endif
|
|
cmp #TOKEN_TAB
|
|
beq L29F5
|
|
cmp #TOKEN_SPC
|
|
.ifdef CONFIG_2
|
|
clc ; also AppleSoft II
|
|
.endif
|
|
beq L29F5
|
|
cmp #','
|
|
; Pre-KIM had no CLC. KIM added the CLC
|
|
; here. Post-KIM moved the CLC up...
|
|
; (makes no sense on KIM, liveness = 0)
|
|
.if .def(CONFIG_11A) && (!.def(CONFIG_2))
|
|
clc
|
|
.endif
|
|
beq L29DE
|
|
cmp #$3B
|
|
beq L2A0D
|
|
jsr FRMEVL
|
|
bit VALTYP
|
|
bmi PRSTRING
|
|
jsr FOUT
|
|
jsr STRLIT
|
|
.ifndef CONFIG_NO_CR
|
|
ldy #$00
|
|
lda (FAC_LAST-1),y
|
|
clc
|
|
adc POSX
|
|
.ifdef KBD
|
|
cmp #$28
|
|
.else
|
|
cmp Z17
|
|
.endif
|
|
bcc L29B1
|
|
jsr CRDO
|
|
L29B1:
|
|
.endif
|
|
jsr STRPRT
|
|
.ifdef KBD
|
|
jmp L297E
|
|
.else
|
|
jsr OUTSP
|
|
bne L297E ; branch always
|
|
.endif
|
|
|
|
.ifdef KBD
|
|
; PATCHES
|
|
LE86C:
|
|
pla
|
|
jmp CONTROL_C_TYPED
|
|
LE870:
|
|
jsr GETBYT
|
|
txa
|
|
LE874:
|
|
beq LE878
|
|
bpl LE8F2
|
|
LE878:
|
|
jmp IQERR
|
|
; PATCHES
|
|
.endif
|
|
|
|
|
|
|
|
.ifndef KBD
|
|
L29B9:
|
|
.ifdef CBM2
|
|
lda #$00
|
|
sta INPUTBUFFER,x
|
|
ldx #<(INPUTBUFFER-1)
|
|
ldy #>(INPUTBUFFER-1)
|
|
.else
|
|
.ifndef APPLE
|
|
ldy #$00
|
|
sty INPUTBUFFER,x
|
|
ldx #LINNUM+1
|
|
.endif
|
|
.if .def(MICROTAN) || .def(SYM1)
|
|
bne CRDO2
|
|
.endif
|
|
.endif
|
|
.ifdef CONFIG_FILE
|
|
lda CURDVC
|
|
bne L29DD
|
|
.endif
|
|
.endif
|
|
|
|
|
|
CRDO:
|
|
.if .def(CONFIG_PRINTNULLS) && .def(CONFIG_FILE)
|
|
lda CURDVC
|
|
bne LC9D8
|
|
sta POSX
|
|
LC9D8:
|
|
.endif
|
|
lda #CRLF_1
|
|
.ifndef CONFIG_CBM_ALL
|
|
sta POSX
|
|
.endif
|
|
jsr OUTDO
|
|
CRDO2:
|
|
lda #CRLF_2
|
|
jsr OUTDO
|
|
|
|
PRINTNULLS:
|
|
.if .def(KBD) || .def(AIM65)
|
|
lda #$00
|
|
sta POSX
|
|
eor #$FF
|
|
.else
|
|
.if .def(CONFIG_NULL) || .def(CONFIG_PRINTNULLS)
|
|
.ifdef CONFIG_FILE
|
|
; Although there is no statement for it,
|
|
; CBM1 had NULL support and ignores
|
|
; it when not targeting the screen,
|
|
; CBM2 dropped it completely.
|
|
lda CURDVC
|
|
bne L29DD
|
|
.endif
|
|
txa
|
|
pha
|
|
ldx Z15
|
|
beq L29D9
|
|
.ifdef SYM1
|
|
lda #$FF
|
|
.else
|
|
lda #$00
|
|
.endif
|
|
L29D3:
|
|
jsr OUTDO
|
|
dex
|
|
bne L29D3
|
|
L29D9:
|
|
stx POSX
|
|
pla
|
|
tax
|
|
.else
|
|
.ifndef CONFIG_2
|
|
lda #$00
|
|
sta POSX
|
|
.endif
|
|
eor #$FF
|
|
.endif
|
|
.endif
|
|
L29DD:
|
|
rts
|
|
L29DE:
|
|
lda POSX
|
|
.ifndef CONFIG_NO_CR
|
|
.ifdef KBD
|
|
cmp #$1A
|
|
.else
|
|
cmp Z18
|
|
.endif
|
|
bcc L29EA
|
|
jsr CRDO
|
|
jmp L2A0D
|
|
L29EA:
|
|
.endif
|
|
sec
|
|
L29EB:
|
|
.if .def(CONFIG_CBM_ALL) || .def(AIM65)
|
|
sbc #$0A
|
|
.else
|
|
.ifdef KBD
|
|
sbc #$0D
|
|
.else
|
|
sbc #$0E
|
|
.endif
|
|
.endif
|
|
bcs L29EB
|
|
eor #$FF
|
|
adc #$01
|
|
bne L2A08
|
|
L29F5:
|
|
.ifdef CONFIG_11A
|
|
php
|
|
.else
|
|
pha
|
|
.endif
|
|
jsr GTBYTC
|
|
cmp #')'
|
|
.ifdef CONFIG_11A
|
|
.ifdef CONFIG_2
|
|
bne SYNERR4
|
|
.else
|
|
jne SYNERR
|
|
.endif
|
|
plp
|
|
bcc L2A09
|
|
.else
|
|
.ifdef CONFIG_11
|
|
jne SYNERR
|
|
.else
|
|
bne SYNERR4
|
|
.endif
|
|
pla
|
|
cmp #TOKEN_TAB
|
|
.ifdef CONFIG_11
|
|
bne L2A09
|
|
.else
|
|
bne L2A0A
|
|
.endif
|
|
.endif
|
|
txa
|
|
sbc POSX
|
|
bcc L2A0D
|
|
.ifndef CONFIG_11
|
|
beq L2A0D
|
|
.endif
|
|
L2A08:
|
|
tax
|
|
.ifdef CONFIG_11
|
|
L2A09:
|
|
inx
|
|
.endif
|
|
L2A0A:
|
|
.ifndef CONFIG_11
|
|
jsr OUTSP
|
|
.endif
|
|
dex
|
|
.ifndef CONFIG_11
|
|
bne L2A0A
|
|
.else
|
|
bne L2A13
|
|
.endif
|
|
L2A0D:
|
|
jsr CHRGET
|
|
jmp PRINT2
|
|
.ifdef CONFIG_11
|
|
L2A13:
|
|
jsr OUTSP
|
|
bne L2A0A
|
|
.endif
|
|
|
|
; ----------------------------------------------------------------------------
|
|
; PRINT STRING AT (Y,A)
|
|
; ----------------------------------------------------------------------------
|
|
STROUT:
|
|
jsr STRLIT
|
|
|
|
; ----------------------------------------------------------------------------
|
|
; PRINT STRING AT (FACMO,FACLO)
|
|
; ----------------------------------------------------------------------------
|
|
STRPRT:
|
|
jsr FREFAC
|
|
tax
|
|
ldy #$00
|
|
inx
|
|
L2A22:
|
|
dex
|
|
beq L29DD
|
|
lda (INDEX),y
|
|
jsr OUTDO
|
|
iny
|
|
cmp #$0D
|
|
bne L2A22
|
|
jsr PRINTNULLS
|
|
jmp L2A22
|
|
; ----------------------------------------------------------------------------
|
|
OUTSP:
|
|
.ifdef CONFIG_FILE
|
|
.ifndef CBM1
|
|
; on non-screen devices, print SPACE
|
|
; instead of CRSR RIGHT
|
|
lda CURDVC
|
|
beq LCA40
|
|
lda #$20
|
|
.byte $2C
|
|
LCA40:
|
|
.endif
|
|
lda #$1D ; CRSR RIGHT
|
|
.else
|
|
lda #$20
|
|
.endif
|
|
.byte $2C
|
|
OUTQUES:
|
|
lda #$3F
|
|
|
|
; ----------------------------------------------------------------------------
|
|
; PRINT CHAR FROM (A)
|
|
; ----------------------------------------------------------------------------
|
|
OUTDO:
|
|
.ifndef KBD
|
|
bit Z14
|
|
bmi L2A56
|
|
.endif
|
|
.if .def(CONFIG_PRINT_CR) || .def(CBM1)
|
|
; Commodore forgot to remove this in CBM1
|
|
pha
|
|
.endif
|
|
.ifdef CBM1
|
|
cmp #$1D ; CRSR RIGHT
|
|
beq LCA6A
|
|
cmp #$9D ; CRSR LEFT
|
|
beq LCA5A
|
|
cmp #$14 ; DEL
|
|
bne LCA64
|
|
LCA5A:
|
|
lda POSX
|
|
beq L2A4E
|
|
lda CURDVC
|
|
bne L2A4E
|
|
dec POSX
|
|
LCA64:
|
|
and #$7F
|
|
.endif
|
|
.ifndef CBM2
|
|
cmp #$20
|
|
bcc L2A4E
|
|
.endif
|
|
LCA6A:
|
|
.ifdef CONFIG_CBM1_PATCHES
|
|
lda CURDVC
|
|
jsr PATCH6
|
|
nop
|
|
.endif
|
|
.ifdef CONFIG_PRINT_CR
|
|
lda POSX
|
|
cmp Z17
|
|
bne L2A4C
|
|
.ifdef AIM65
|
|
lda #$00
|
|
sta POSX
|
|
.elseif .def(APPLE)
|
|
nop ; PATCH!
|
|
nop ; don't print CR
|
|
nop
|
|
.else
|
|
jsr CRDO
|
|
.endif
|
|
L2A4C:
|
|
.endif
|
|
.ifndef CONFIG_CBM_ALL
|
|
inc POSX
|
|
.endif
|
|
L2A4E:
|
|
.if .def(CONFIG_PRINT_CR) || .def(CBM1)
|
|
; Commodore forgot to remove this in CBM1
|
|
pla
|
|
.endif
|
|
.ifdef CONFIG_MONCOUT_DESTROYS_Y
|
|
sty DIMFLG
|
|
.endif
|
|
.ifdef CONFIG_IO_MSB
|
|
ora #$80
|
|
.endif
|
|
jsr MONCOUT
|
|
.ifdef CONFIG_IO_MSB
|
|
and #$7F
|
|
.endif
|
|
.ifdef CONFIG_MONCOUT_DESTROYS_Y
|
|
ldy DIMFLG
|
|
.endif
|
|
.ifdef OSI
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
.endif
|
|
L2A56:
|
|
and #$FF
|
|
LE8F2:
|
|
rts
|
|
|
|
; ----------------------------------------------------------------------------
|
|
; ???
|
|
; ----------------------------------------------------------------------------
|
|
.ifdef KBD
|
|
LE8F3:
|
|
pha
|
|
lda $047F
|
|
clc
|
|
beq LE900
|
|
lda #$00
|
|
sta $047F
|
|
sec
|
|
LE900:
|
|
pla
|
|
rts
|
|
.endif
|