422 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			422 lines
		
	
	
		
			7.5 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
 | 
						|
.ifdef GT1
 | 
						|
        jsr     CONVPOSX
 | 
						|
        tya
 | 
						|
.endif
 | 
						|
.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
 | 
						|
.ifndef GT1
 | 
						|
        txa
 | 
						|
        sbc     POSX
 | 
						|
.else
 | 
						|
        lda     POSX
 | 
						|
        jsr     CONVPOSX
 | 
						|
        txa
 | 
						|
        sbc     V6502_Y
 | 
						|
.endif
 | 
						|
        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
 |