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+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 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