chipty5/chipty5-pet40.asm

238 lines
6.9 KiB
NASM

C8RAMSIZE = 4096
.virtual $2000
C8RAM .fill C8START
C8ENTRY .fill C8RAMSIZE - C8START
c8ramend = *-1
.endvirtual
IS_PET = true
ZP_START = $54
.BasicStub MainEntry, 2021
.section code
MainEntry .proc
;lda #EF_REGS
lda #0
sta eflags
jsr InitRandom
jsr ClearScreen
jsr ShowTitle
jsr C8Reset
jsr SoundInit
jsr SetupIRQ
jsr C8Run
rts
.endproc
NOKEY = 255
SetupIRQ .proc
lda #NOKEY
sta prevkey
sei
lda CINV
sta sysirq
lda CINV+1
sta sysirq+1
lda #<handler
sta CINV
lda #>handler
sta CINV+1
cli
rts
handler
lda LSTX
tax
cmp prevkey
beq dotick
cmp #20 ; backspace: reset
bne +
lda #EF_RESET
ora eflags
sta eflags
jmp done
+ txa
cmp #'p' ; P: Pause
bne +
lda #EF_PAUSE
eor eflags
sta eflags
jmp done
+ txa
cmp #'=' ; =: Registers
bne +
lda #EF_REGS
eor eflags
sta eflags
jmp done
+ txa
cmp #'/' ; /: Shift behaviour
bne +
lda #EF_SHIFTX
eor eflags
sta eflags
jmp done
+ txa
cmp #'l' ; L: Load
bne +
lda #EF_LOAD
ora eflags
sta eflags
jmp done
+
done stx prevkey
dotick jsr Tick
jmp (sysirq)
.section bss
sysirq .word ?
prevkey .byte ?
.endsection bss
.endproc
RestoreIRQ .proc
sei
lda SetupIRQ.sysirq
sta CINV
lda SetupIRQ.sysirq+1
sta CINV+1
cli
rts
.endproc
InitRandom .proc
ldx #0
- lda TIME, x
sta rngst, x
inx
cpx #3
bne -
;lda io.vic2.raster
;sta rngst+3
rts
.endproc
ClearScreen .proc
lda #'{clear}'
jsr CHROUT
rts
.endproc
ReadKeyboard .proc
lda LSTX
cmp #NOKEY
bne +
nokey
lda #$ff
rts
+ ldy #0
- cmp kbdcodes, y
beq +
cpy #size(kbdcodes)
beq nokey
iny
bne -
+ tya
rts
.endproc
GetVBlank .proc
; Clear carry flag if retracing
; FIXME
clc
rts
lda #io.CRTC_VBLANK
bit io.crtc.ctrl
bne +
sec
rts
+ clc
rts
.endproc
SoundInit .proc
lda #io.VIA_SR_OUT_T2_FR
sta io.via.acr
lda #0
sta io.via.t2c
lda #22
sta io.via.sr
rts
.endproc
SoundOn .proc
lda #211
sta io.via.t2c
rts
.endproc
SoundOff .proc
lda #0
sta io.via.t2c
rts
.endproc
InputFileName .proc
jsr RestoreIRQ
ldy #0
sty ch8filenamelen
sty NDX
lda #'{home}'
jsr CHROUT
ldx #ROW_FILENAME
lda #'{down}'
- jsr CHROUT
dex
bne -
ldx #ROW_FILENAME
ldy #0
jsr myPLOT
lda #<prompt
ldy #>prompt
jsr mySTROUT
lda #ROW_FILENAME
sta TBLX
lda #size(prompt)
sta PNTR
jsr $e07f
ldy #0
- lda #0
sta ch8filename, y
jsr CHRIN
cmp #13
beq +
sta ch8filename, y
iny
jmp -
+ sty ch8filenamelen
ldx #ROW_FILENAME
jsr ClearLine
jsr SetupIRQ
rts
.section data
.enc "screen"
prompt .null "file name: "
.enc "none"
.endsection data
.endproc
.endsection code
.section data
; kbdcodes .byte 56, 59, 8, 11, 62, 9, 14, 17, 10, 13, 18, 21, 12, 23, 20, 31
kbdcodes .text "1234qwerasdfzxcv"
.endsection data
; vim: syntax=64tass