549 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			549 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
.segment "INIT"
 | 
						|
 | 
						|
.ifdef KBD
 | 
						|
FNDLIN2:
 | 
						|
        php
 | 
						|
        jmp     FNDLIN
 | 
						|
.endif
 | 
						|
 | 
						|
; ----------------------------------------------------------------------------
 | 
						|
PR_WRITTEN_BY:
 | 
						|
.ifndef KBD
 | 
						|
  .ifndef CONFIG_CBM_ALL
 | 
						|
    .ifndef AIM65
 | 
						|
      .ifndef SYM1
 | 
						|
        lda     #<QT_WRITTEN_BY
 | 
						|
        ldy     #>QT_WRITTEN_BY
 | 
						|
        jsr     STROUT
 | 
						|
      .endif
 | 
						|
    .endif
 | 
						|
  .endif
 | 
						|
.endif
 | 
						|
COLD_START:
 | 
						|
.ifdef SYM1
 | 
						|
        jsr     ACCESS
 | 
						|
.endif
 | 
						|
.ifdef KBD
 | 
						|
        lda     #<LFD81
 | 
						|
        sta     $03A0
 | 
						|
        lda     #>LFD81
 | 
						|
        sta     $03A1
 | 
						|
        lda     #$20
 | 
						|
        sta     $0480
 | 
						|
        lda     $0352
 | 
						|
        sta     $04
 | 
						|
        lda     $0353
 | 
						|
        sta     $05
 | 
						|
.else
 | 
						|
  .ifndef CBM2
 | 
						|
        ldx     #$FF
 | 
						|
        stx     CURLIN+1
 | 
						|
  .endif
 | 
						|
  .ifdef CONFIG_NO_INPUTBUFFER_ZP
 | 
						|
        ldx     #$FB
 | 
						|
  .elseif .def(AIM65)
 | 
						|
        ldx     #$FE
 | 
						|
  .endif
 | 
						|
        txs
 | 
						|
  .ifndef CONFIG_CBM_ALL
 | 
						|
        lda     #<COLD_START
 | 
						|
        ldy     #>COLD_START
 | 
						|
        sta     GORESTART+1
 | 
						|
        sty     GORESTART+2
 | 
						|
    .ifndef AIM65
 | 
						|
        sta     GOSTROUT+1
 | 
						|
        sty     GOSTROUT+2
 | 
						|
        lda     #<AYINT
 | 
						|
        ldy     #>AYINT
 | 
						|
        sta     GOAYINT
 | 
						|
        sty     GOAYINT+1
 | 
						|
        lda     #<GIVAYF
 | 
						|
        ldy     #>GIVAYF
 | 
						|
        sta     GOGIVEAYF
 | 
						|
        sty     GOGIVEAYF+1
 | 
						|
    .endif
 | 
						|
  .endif
 | 
						|
        lda     #$4C
 | 
						|
  .ifdef CONFIG_CBM_ALL
 | 
						|
        sta     JMPADRS
 | 
						|
  .endif
 | 
						|
        sta     GORESTART
 | 
						|
  .ifdef AIM65
 | 
						|
        sta     JMPADRS
 | 
						|
        sta     ATN
 | 
						|
        sta     GOSTROUT
 | 
						|
  .else
 | 
						|
  .ifndef CONFIG_CBM_ALL
 | 
						|
        sta     GOSTROUT
 | 
						|
        sta     JMPADRS
 | 
						|
  .endif
 | 
						|
  .ifdef SYM1
 | 
						|
        sta     USR1
 | 
						|
        sta     USR3
 | 
						|
        sta     USR2
 | 
						|
  .endif
 | 
						|
  .if (!.def(CONFIG_RAM)) && (!.def(CONFIG_CBM_ALL))
 | 
						|
        sta     USR
 | 
						|
  .endif
 | 
						|
  .endif
 | 
						|
 | 
						|
  .ifndef CONFIG_RAM
 | 
						|
    .ifdef APPLE
 | 
						|
          lda     #<USR_FUNC
 | 
						|
          ldy     #>USR_FUNC
 | 
						|
    .else
 | 
						|
          lda     #<IQERR
 | 
						|
          ldy     #>IQERR
 | 
						|
    .endif
 | 
						|
    .ifdef AIM65
 | 
						|
          sta     ATN+1
 | 
						|
          sty     ATN+2
 | 
						|
          sta     GOSTROUT+1
 | 
						|
          sty     GOSTROUT+2
 | 
						|
    .else
 | 
						|
          sta     USR+1
 | 
						|
          sty     USR+2
 | 
						|
      .ifdef SYM1
 | 
						|
          sta     USR1+1
 | 
						|
          sty     USR1+2
 | 
						|
          lda     #<DUMPT
 | 
						|
          ldy     #>DUMPT
 | 
						|
          sta     USR2+1
 | 
						|
          sty     USR2+2
 | 
						|
          lda     #<L8C78
 | 
						|
          ldy     #>L8C78
 | 
						|
          sta     USR3+1
 | 
						|
          sty     USR3+2
 | 
						|
      .endif
 | 
						|
    .endif
 | 
						|
  .endif
 | 
						|
  .ifndef CBM1
 | 
						|
        lda     #WIDTH
 | 
						|
        sta     Z17
 | 
						|
        lda     #WIDTH2
 | 
						|
        sta     Z18
 | 
						|
  .endif
 | 
						|
.endif
 | 
						|
 | 
						|
; All non-CONFIG_SMALL versions of BASIC have
 | 
						|
; the same bug here: While the number of bytes
 | 
						|
; to be copied is correct for CONFIG_SMALL,
 | 
						|
; it is one byte short on non-CONFIG_SMALL:
 | 
						|
; It seems the "ldx" value below has been
 | 
						|
; hardcoded. So on these configurations,
 | 
						|
; the last byte of GENERIC_RNDSEED, which
 | 
						|
; is 5 bytes instead of 4, does not get copied -
 | 
						|
; which is nothing major, because it is just
 | 
						|
; the least significant 8 bits of the mantissa
 | 
						|
; of the random number seed.
 | 
						|
; KBD added three bytes to CHRGET and removed
 | 
						|
; the random number seed, but only adjusted
 | 
						|
; the number of bytes by adding 3 - this
 | 
						|
; copies four bytes too many, which is no
 | 
						|
; problem.
 | 
						|
.ifndef CONFIG_CHRGET_NOT_IN_ZP
 | 
						|
  .ifdef CONFIG_SMALL
 | 
						|
    .ifdef KBD
 | 
						|
        ldx     #GENERIC_CHRGET_END-GENERIC_CHRGET+4
 | 
						|
    .else
 | 
						|
        ldx     #GENERIC_CHRGET_END-GENERIC_CHRGET
 | 
						|
    .endif
 | 
						|
  .else
 | 
						|
        ldx     #GENERIC_CHRGET_END-GENERIC_CHRGET-1 ; XXX BUG!
 | 
						|
  .endif
 | 
						|
L4098:
 | 
						|
        lda     GENERIC_CHRGET-1,x
 | 
						|
        sta     CHRGET-1,x
 | 
						|
        dex
 | 
						|
        bne     L4098
 | 
						|
.else
 | 
						|
        ldx     #0
 | 
						|
.endif
 | 
						|
.ifdef CONFIG_2
 | 
						|
        lda     #$03
 | 
						|
        sta     DSCLEN
 | 
						|
.endif
 | 
						|
.ifndef KBD
 | 
						|
        txa
 | 
						|
        sta     SHIFTSIGNEXT
 | 
						|
  .ifdef CONFIG_CBM_ALL
 | 
						|
        sta     CURDVC
 | 
						|
  .endif
 | 
						|
        sta     LASTPT+1
 | 
						|
  .ifndef AIM65
 | 
						|
  .if .defined(CONFIG_NULL) || .defined(CONFIG_PRINTNULLS)
 | 
						|
        sta     Z15
 | 
						|
  .endif
 | 
						|
  .endif
 | 
						|
  .ifndef CONFIG_11
 | 
						|
        sta     POSX
 | 
						|
  .endif
 | 
						|
        pha
 | 
						|
        sta     Z14
 | 
						|
  .ifndef CBM2
 | 
						|
   .ifndef AIM65
 | 
						|
   .ifndef SYM1
 | 
						|
    .ifndef MICROTAN
 | 
						|
        lda     #$03
 | 
						|
        sta     DSCLEN
 | 
						|
    .endif
 | 
						|
   .endif
 | 
						|
   .endif
 | 
						|
    .ifndef CONFIG_11
 | 
						|
        lda     #$2C
 | 
						|
        sta     LINNUM+1
 | 
						|
    .endif
 | 
						|
        jsr     CRDO
 | 
						|
  .endif
 | 
						|
  .ifdef CBM2
 | 
						|
        inx
 | 
						|
        stx     INPUTBUFFER-3
 | 
						|
        stx     INPUTBUFFER-4
 | 
						|
  .endif
 | 
						|
  .ifdef APPLE
 | 
						|
        lda     #$01
 | 
						|
        sta     INPUTBUFFER-3
 | 
						|
        sta     INPUTBUFFER-4
 | 
						|
  .endif
 | 
						|
        ldx     #TEMPST
 | 
						|
        stx     TEMPPT
 | 
						|
.ifndef CONFIG_CBM_ALL
 | 
						|
        lda     #<QT_MEMORY_SIZE
 | 
						|
        ldy     #>QT_MEMORY_SIZE
 | 
						|
        jsr     STROUT
 | 
						|
  .ifdef APPLE
 | 
						|
        jsr     INLINX
 | 
						|
  .else
 | 
						|
        jsr     NXIN
 | 
						|
  .endif
 | 
						|
        stx     TXTPTR
 | 
						|
        sty     TXTPTR+1
 | 
						|
        jsr     CHRGET
 | 
						|
  .ifndef AIM65
 | 
						|
    .ifndef SYM1
 | 
						|
        cmp     #$41
 | 
						|
        beq     PR_WRITTEN_BY
 | 
						|
    .endif
 | 
						|
  .endif
 | 
						|
        tay
 | 
						|
        bne     L40EE
 | 
						|
.endif
 | 
						|
.ifndef CBM2
 | 
						|
        lda     #<RAMSTART2
 | 
						|
.endif
 | 
						|
        ldy     #>RAMSTART2
 | 
						|
.ifdef CONFIG_2
 | 
						|
        sta     TXTTAB
 | 
						|
        sty     TXTTAB+1
 | 
						|
.endif
 | 
						|
        sta     LINNUM
 | 
						|
        sty     LINNUM+1
 | 
						|
.ifdef CBM2
 | 
						|
		tay
 | 
						|
.else
 | 
						|
        ldy     #$00
 | 
						|
.endif
 | 
						|
L40D7:
 | 
						|
        inc     LINNUM
 | 
						|
        bne     L40DD
 | 
						|
        inc     LINNUM+1
 | 
						|
.ifdef CBM1
 | 
						|
; CBM: hard RAM top limit is $8000
 | 
						|
        lda     LINNUM+1
 | 
						|
        cmp     #$80
 | 
						|
        beq     L40FA
 | 
						|
.endif
 | 
						|
.ifdef CBM2
 | 
						|
; optimized version of the CBM1 code
 | 
						|
        bmi     L40FA
 | 
						|
.endif
 | 
						|
.if .def(AIM65)
 | 
						|
; AIM65: hard RAM top limit is $A000
 | 
						|
        lda     LINNUM+1
 | 
						|
        cmp     #$A0
 | 
						|
        beq     L40FA
 | 
						|
.endif
 | 
						|
L40DD:
 | 
						|
.ifdef CONFIG_2
 | 
						|
        lda     #$55 ; 01010101 / 10101010
 | 
						|
.else
 | 
						|
        lda     #$92 ; 10010010 / 00100100
 | 
						|
.endif
 | 
						|
        sta     (LINNUM),y
 | 
						|
        cmp     (LINNUM),y
 | 
						|
        bne     L40FA
 | 
						|
        asl     a
 | 
						|
        sta     (LINNUM),y
 | 
						|
        cmp     (LINNUM),y
 | 
						|
.ifdef CONFIG_CBM_ALL
 | 
						|
        beq     L40D7
 | 
						|
.else
 | 
						|
  .ifndef CONFIG_11
 | 
						|
        beq     L40D7; old: faster
 | 
						|
        bne     L40FA
 | 
						|
  .else
 | 
						|
        bne     L40FA; new: slower
 | 
						|
        beq     L40D7
 | 
						|
  .endif
 | 
						|
L40EE:
 | 
						|
        jsr     CHRGOT
 | 
						|
        jsr     LINGET
 | 
						|
        tay
 | 
						|
        beq     L40FA
 | 
						|
        jmp     SYNERR
 | 
						|
.endif
 | 
						|
L40FA:
 | 
						|
.ifdef GT1
 | 
						|
        lda     MEMSIZE
 | 
						|
        cmp     #1
 | 
						|
        sbc     #0
 | 
						|
        sta     LINNUM+1
 | 
						|
.endif
 | 
						|
        lda     LINNUM
 | 
						|
        ldy     LINNUM+1
 | 
						|
        sta     MEMSIZ
 | 
						|
        sty     MEMSIZ+1
 | 
						|
.if !(.def(MICROTAN) || .def(AIM65) || .def(SYM1))
 | 
						|
        sta     FRETOP
 | 
						|
        sty     FRETOP+1
 | 
						|
.endif
 | 
						|
L4106:
 | 
						|
.ifndef CONFIG_CBM_ALL
 | 
						|
  .ifdef APPLE
 | 
						|
        lda     #$FF
 | 
						|
        jmp     L2829
 | 
						|
        .word	STROUT ; PATCH!
 | 
						|
        jsr     NXIN
 | 
						|
  .else
 | 
						|
        lda     #<QT_TERMINAL_WIDTH
 | 
						|
        ldy     #>QT_TERMINAL_WIDTH
 | 
						|
        jsr     STROUT
 | 
						|
        jsr     NXIN
 | 
						|
  .endif
 | 
						|
        stx     TXTPTR
 | 
						|
        sty     TXTPTR+1
 | 
						|
        jsr     CHRGET
 | 
						|
        tay
 | 
						|
        beq     L4136
 | 
						|
        jsr     LINGET
 | 
						|
        lda     LINNUM+1
 | 
						|
        bne     L4106
 | 
						|
        lda     LINNUM
 | 
						|
        cmp     #$10
 | 
						|
        bcc     L4106
 | 
						|
L2829:
 | 
						|
        sta     Z17
 | 
						|
L4129:
 | 
						|
  .ifdef AIM65
 | 
						|
        sbc     #$0A
 | 
						|
  .else
 | 
						|
        sbc     #$0E
 | 
						|
  .endif
 | 
						|
        bcs     L4129
 | 
						|
        eor     #$FF
 | 
						|
  .ifdef AIM65
 | 
						|
        sbc     #$08
 | 
						|
  .else
 | 
						|
        sbc     #$0C
 | 
						|
  .endif
 | 
						|
        clc
 | 
						|
        adc     Z17
 | 
						|
        sta     Z18
 | 
						|
.endif
 | 
						|
L4136:
 | 
						|
.ifdef CONFIG_RAM
 | 
						|
        lda     #<QT_WANT
 | 
						|
        ldy     #>QT_WANT
 | 
						|
        jsr     STROUT
 | 
						|
        jsr     NXIN
 | 
						|
        stx     TXTPTR
 | 
						|
        sty     TXTPTR+1
 | 
						|
        jsr     CHRGET
 | 
						|
        ldx     #<RAMSTART1
 | 
						|
        ldy     #>RAMSTART1
 | 
						|
        cmp     #'Y'
 | 
						|
        beq     L4183
 | 
						|
        cmp     #'A'
 | 
						|
        beq     L4157
 | 
						|
        cmp     #'N'
 | 
						|
        bne     L4136
 | 
						|
L4157:
 | 
						|
        ldx     #<IQERR
 | 
						|
        ldy     #>IQERR
 | 
						|
        stx     UNFNC_ATN
 | 
						|
        sty     UNFNC_ATN+1
 | 
						|
        ldx     #<ATN	; overwrite starting
 | 
						|
        ldy     #>ATN	; with ATN
 | 
						|
        cmp     #'A'
 | 
						|
        beq     L4183
 | 
						|
        ldx     #<IQERR
 | 
						|
        ldy     #>IQERR
 | 
						|
        stx     UNFNC_COS
 | 
						|
        sty     UNFNC_COS+1
 | 
						|
        stx     UNFNC_TAN
 | 
						|
        sty     UNFNC_TAN+1
 | 
						|
        stx     UNFNC_SIN
 | 
						|
        sty     UNFNC_SIN+1
 | 
						|
        ldx     #<SIN_COS_TAN_ATN	; overwrite
 | 
						|
        ldy     #>SIN_COS_TAN_ATN	; all of trig.s
 | 
						|
L4183:
 | 
						|
.else
 | 
						|
        ldx     #<RAMSTART2
 | 
						|
        ldy     #>RAMSTART2
 | 
						|
.endif
 | 
						|
        stx     TXTTAB
 | 
						|
        sty     TXTTAB+1
 | 
						|
        ldy     #$00
 | 
						|
        tya
 | 
						|
        sta     (TXTTAB),y
 | 
						|
        inc     TXTTAB
 | 
						|
.ifndef CBM2
 | 
						|
        bne     L4192
 | 
						|
        inc     TXTTAB+1
 | 
						|
L4192:
 | 
						|
.endif
 | 
						|
.if CONFIG_SCRTCH_ORDER = 1
 | 
						|
        jsr     SCRTCH
 | 
						|
.endif
 | 
						|
        lda     TXTTAB
 | 
						|
        ldy     TXTTAB+1
 | 
						|
        jsr     REASON
 | 
						|
.ifdef CBM2
 | 
						|
        lda     #<QT_BASIC
 | 
						|
        ldy     #>QT_BASIC
 | 
						|
        jsr     STROUT
 | 
						|
.else
 | 
						|
        jsr     CRDO
 | 
						|
.endif
 | 
						|
        lda     MEMSIZ
 | 
						|
        sec
 | 
						|
        sbc     TXTTAB
 | 
						|
        tax
 | 
						|
        lda     MEMSIZ+1
 | 
						|
        sbc     TXTTAB+1
 | 
						|
        jsr     LINPRT
 | 
						|
        lda     #<QT_BYTES_FREE
 | 
						|
        ldy     #>QT_BYTES_FREE
 | 
						|
        jsr     STROUT
 | 
						|
.if CONFIG_SCRTCH_ORDER = 2
 | 
						|
        jsr     SCRTCH
 | 
						|
.endif
 | 
						|
.ifdef CONFIG_CBM_ALL
 | 
						|
        jmp     RESTART
 | 
						|
.elseif .def(AIM65)
 | 
						|
        lda     #<CRDO
 | 
						|
        ldy     #>CRDO
 | 
						|
        sta     GORESTART+1
 | 
						|
        sty     GORESTART+2
 | 
						|
        jmp     RESTART
 | 
						|
.else
 | 
						|
        lda     #<STROUT
 | 
						|
        ldy     #>STROUT
 | 
						|
        sta     GOSTROUT+1
 | 
						|
        sty     GOSTROUT+2
 | 
						|
  .if CONFIG_SCRTCH_ORDER = 3
 | 
						|
         jsr     SCRTCH
 | 
						|
  .endif
 | 
						|
        lda     #<RESTART
 | 
						|
        ldy     #>RESTART
 | 
						|
        sta     GORESTART+1
 | 
						|
        sty     GORESTART+2
 | 
						|
        jmp     (GORESTART+1)
 | 
						|
.endif
 | 
						|
 | 
						|
  .if .def(CONFIG_RAM) || .def(OSI)
 | 
						|
; OSI is compiled for ROM, but includes
 | 
						|
; this unused string
 | 
						|
QT_WANT:
 | 
						|
        .byte   "WANT SIN-COS-TAN-ATN"
 | 
						|
        .byte   0
 | 
						|
  .endif
 | 
						|
QT_WRITTEN_BY:
 | 
						|
  .ifndef CONFIG_CBM_ALL
 | 
						|
  .if !(.def(AIM65) || .def(SYM1))
 | 
						|
    .ifdef APPLE
 | 
						|
		asc80 "COPYRIGHT 1977 BY MICROSOFT CO"
 | 
						|
		.byte	CR,0
 | 
						|
    .else
 | 
						|
        .byte   CR,LF,$0C ; FORM FEED
 | 
						|
      .ifndef CONFIG_11
 | 
						|
        .byte   "WRITTEN BY RICHARD W. WEILAND."
 | 
						|
      .else
 | 
						|
        .byte   "WRITTEN BY WEILAND & GATES"
 | 
						|
      .endif
 | 
						|
        .byte   CR,LF,0
 | 
						|
    .endif
 | 
						|
   .endif
 | 
						|
QT_MEMORY_SIZE:
 | 
						|
        .byte   "MEMORY SIZE"
 | 
						|
        .byte   0
 | 
						|
QT_TERMINAL_WIDTH:
 | 
						|
    .if !(.def(AIM65) || .def(SYM1))
 | 
						|
        .byte   "TERMINAL "
 | 
						|
    .endif
 | 
						|
        .byte   "WIDTH"
 | 
						|
        .byte   0
 | 
						|
  .endif
 | 
						|
QT_BYTES_FREE:
 | 
						|
        .byte   " BYTES FREE"
 | 
						|
  .ifdef CBM1
 | 
						|
  .elseif .def(CBM2)
 | 
						|
        .byte   CR,0
 | 
						|
  .elseif .def(APPLE)
 | 
						|
        .byte   0
 | 
						|
  .else
 | 
						|
        .byte   CR,LF,CR,LF
 | 
						|
  .endif
 | 
						|
QT_BASIC:
 | 
						|
  .ifdef OSI
 | 
						|
        .byte   "OSI 6502 BASIC VERSION 1.0 REV 3.2"
 | 
						|
  .endif
 | 
						|
  .ifdef KIM
 | 
						|
        .byte   "MOS TECH 6502 BASIC V1.1"
 | 
						|
  .endif
 | 
						|
  .ifdef MICROTAN
 | 
						|
        .byte   "MICROTAN BASIC"
 | 
						|
  .endif
 | 
						|
  .ifdef AIM65
 | 
						|
        .byte   "  AIM 65 BASIC V1.1"
 | 
						|
  .endif
 | 
						|
  .ifdef SYM1
 | 
						|
        .byte   "BASIC V1.1"
 | 
						|
  .endif
 | 
						|
  .ifdef CBM1
 | 
						|
        .byte   $13 ; HOME
 | 
						|
        .byte   "*** COMMODORE BASIC ***"
 | 
						|
        .byte   $11,$11,$11,0 ; DOWN/DOWN/DOWN
 | 
						|
  .endif
 | 
						|
  .ifdef CBM2
 | 
						|
    .ifndef GT1
 | 
						|
        .byte   "### COMMODORE BASIC ###"
 | 
						|
        .byte   CR,CR,0
 | 
						|
    .else
 | 
						|
        .byte   "### MS BASIC ###"
 | 
						|
        .byte   CR,CR,0
 | 
						|
    .endif
 | 
						|
  .endif
 | 
						|
  .ifdef APPLE
 | 
						|
        .byte   LF,CR,LF
 | 
						|
		.byte	"APPLE BASIC V1.1"
 | 
						|
  .endif
 | 
						|
  .ifndef CONFIG_CBM_ALL
 | 
						|
        .byte   CR,LF
 | 
						|
    .ifdef MICROTAN
 | 
						|
        .byte   "(C) 1980 MICROSOFT"
 | 
						|
    .elseif .def(AIM65)
 | 
						|
        .byte   0
 | 
						|
        .byte   "(C) 1978 MICROSOFT"
 | 
						|
    .elseif .def(SYM1)
 | 
						|
        .byte   "COPYRIGHT 1978 SYNERTEK SYSTEMS CORP."
 | 
						|
    .else
 | 
						|
        .byte   "COPYRIGHT 1977 BY MICROSOFT CO."
 | 
						|
    .endif
 | 
						|
        .byte   CR,LF
 | 
						|
      .ifndef AIM65
 | 
						|
        .byte   0
 | 
						|
      .endif
 | 
						|
  .endif
 | 
						|
.endif
 |