mrbuffer/src/main.S
David Stancu f1b1cb084d some minor cleanup before i refactor it again
also implemented backspace
2018-02-06 20:05:35 -05:00

168 lines
3.2 KiB
ArmAsm

rel
typ $B3
dsk main.l
; ensure 16-bit mode (unnecessary?)
clc
xce
rep #$30
phk
plb
; half bank for accumulator, you don't want to toggle them on then back off, right?
sep #$30
; toggle the softswitches; they don't take any values. some are only triggered
; by writes, $C054 can be triggered by a read
stal $00C000 ; disable 80 column store?
stal $00C00C ; disable 80 column hardware?!
stal $00C050 ; set standard apple ii gfx mode
stal $00C051 ; select text mode only. "only"?
ldal $00C054 ; select text page 1 (there are 2)
ldal $00C056 ; select "low res" graphics
rep #$30
sep #$20
; show the current char on screen
; read keyboard then hit strobe to reset
ldx #0
ldal $00C010
:kloop clc
ldal $00C000
bit #%1
bmi :kjump
jmp :kloop
:kjump jsr keydown
jmp :kloop
keydown nop
cmp #$8B ; up
beq up
cmp #$8A ; down
beq down
cmp #$88 ; left
beq left
cmp #$95 ; right
beq right
cmp #$FF ; backspace
beq backspace
cmp #$8D ; return
beq down
jmp dispchar
backspace clc
cpx #0
bne :drop
jmp :out
:drop dex
:out lda #$A0
stal $000400,X
jmp rtsout
up clc
phy
ldy #0
jsr updown
ply
jmp rtsout
down clc
phy
ldy #1
jsr updown
ply
jmp rtsout
updown clc
cpx #1488
beq rtsout
rep #$30
pha
txa
cpy #0
beq :ldown
bne :lup
:lup adc #128
jmp :lcont
:ldown sbc #128
:lcont tax
pla
sep #$20
jmp rtsout
left clc
cpx #0
beq rtsout
dex
jmp rtsout
right clc
cpx #39
beq rtsout
inx
jmp rtsout
dispchar stal $000400,X
inx
jmp rtsout
rtsout ldal $00C010
lda #0
rts
; working text blit
* ldx #hithere+2 ; strl, first two bytes are strlen, # denotes immediate addr val
* ldy #$0400 ; start of text buffer on 00
* ldal hithere
* dec
* mvn $02, $00
* brk
; Important locations
SPEAKER equ $E0C030
PRODOS16 equ $E100A8
jsl PRODOS16
; This exit code is "device busy", why is it the only one
; that works?!
da $29
adrl QP
bcs ERROR
ERROR brk
QP adrl $0000
da $00
hithere strl "this was excruciating"
brkboi brk