Files
6502PC/rom/init.s
T
2026-09-27 22:09:00 +02:00

210 lines
4.8 KiB
ArmAsm

.segment "INIT"
; ----------------------------------------------------------------------------
PR_WRITTEN_BY:
lda #<QT_WRITTEN_BY
ldy #>QT_WRITTEN_BY
jsr STROUT
COLD_START:
ldx #$FF
stx CURLIN+1
ldx #$FB
txs
lda #<COLD_START
ldy #>COLD_START
sta GORESTART+1
sty GORESTART+2
sta GOSTROUT+1
sty GOSTROUT+2
lda #<AYINT
ldy #>AYINT
sta GOAYINT
sty GOAYINT+1
lda #<GIVAYF
ldy #>GIVAYF
sta GOGIVEAYF
sty GOGIVEAYF+1
lda #$4C
sta GORESTART
sta GOSTROUT
sta JMPADRS
sta USR
lda #<IQERR
ldy #>IQERR
sta USR+1
sty USR+2
lda #WIDTH
sta Z17
lda #WIDTH2
sta Z18
; 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.
ldx #GENERIC_CHRGET_END-GENERIC_CHRGET-1 ; XXX
L4098:
lda GENERIC_CHRGET-1,x
sta CHRGET-1,x
dex
bne L4098
lda #$03
sta DSCLEN
txa
sta SHIFTSIGNEXT
sta LASTPT+1
pha
sta Z14
lda #$03
sta DSCLEN
jsr CRDO
lda #$01
sta INPUTBUFFER-3
sta INPUTBUFFER-4
ldx #TEMPST
stx TEMPPT
lda #<$BC00 ; Start of IO
sta MEMSIZ
lda #>$BC00
sta MEMSIZ+1
jmp L4106
jsr NXIN
stx TXTPTR
sty TXTPTR+1
jsr CHRGET
cmp #$41
bne SKIPPED
jmp PR_WRITTEN_BY
SKIPPED:
tay
bne L40EE
lda #<RAMSTART2
ldy #>RAMSTART2
sta TXTTAB
sty TXTTAB+1
sta LINNUM
sty LINNUM+1
ldy #$00
L40D7:
inc LINNUM
bne L40DD
inc LINNUM+1
L40DD:
lda #$55 ; 01010101 / 10101010
sta (LINNUM),y
cmp (LINNUM),y
bne L40FA
asl a
sta (LINNUM),y
cmp (LINNUM),y
bne L40FA; new: slower
beq L40D7
L40EE:
jsr CHRGOT
jsr LINGET
tay
beq L40FA
jmp SYNERR
L40FA:
lda LINNUM
ldy LINNUM+1
sta MEMSIZ
sty MEMSIZ+1
sta FRETOP
sty FRETOP+1
L4106:
lda #<QT_TERMINAL_WIDTH
ldy #>QT_TERMINAL_WIDTH
jsr STROUT
jsr NXIN
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:
sbc #$0E
bcs L4129
eor #$FF
sbc #$0C
clc
adc Z17
sta Z18
L4136:
ldx #<RAMSTART2
ldy #>RAMSTART2
stx TXTTAB
sty TXTTAB+1
ldy #$00
tya
sta (TXTTAB),y
inc TXTTAB
bne L4192
inc TXTTAB+1
L4192:
lda TXTTAB
ldy TXTTAB+1
jsr REASON
jsr CRDO
lda MEMSIZ
sec
sbc TXTTAB
tax
lda MEMSIZ+1
sbc TXTTAB+1
jsr LINPRT
lda #<QT_BYTES_FREE
ldy #>QT_BYTES_FREE
jsr STROUT
jsr SCRTCH
lda #<STROUT
ldy #>STROUT
sta GOSTROUT+1
sty GOSTROUT+2
lda #<RESTART
ldy #>RESTART
sta GORESTART+1
sty GORESTART+2
jmp (GORESTART+1)
QT_WRITTEN_BY:
.byte CR,LF,$0C ; FORM FEED
.byte "WRITTEN BY WEILAND & GATES"
.byte CR,LF,0
QT_MEMORY_SIZE:
.byte "MEMORY SIZE"
.byte 0
QT_TERMINAL_WIDTH:
.byte "TERMINAL "
.byte "WIDTH"
.byte 0
QT_BYTES_FREE:
.byte " BYTES FREE"
.byte CR,LF,CR,LF
QT_BASIC:
.byte CR,LF
.byte "COPYRIGHT 1977 BY MICROSOFT CO."
.byte CR,LF