diff --git a/src/main.rs b/src/main.rs index d2d8818..78700d8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -53,18 +53,21 @@ fn main() { let mut stdin = async_stdin().keys(); print!("{}{}", cursor::Hide, clear::All,); - 'main: loop { + loop { screen.draw(); if let Some(Ok(key)) = stdin.next() { + keyboard.read_keys(key); match key { Key::Char('q') => { - break 'main; + break; } - Key::Char(' ') => cpu_controller.toggle(), + Key::Char('`') => cpu_controller.toggle(), Key::Char('\n') => cpu_controller.cycle(), Key::Char('i') => cpu_controller.irq(), - _ => keyboard.read_keys(key), + _ => {} } + } else { + keyboard.clear_keys(); } sleep(Duration::from_millis(16)); } diff --git a/src/roms/george.asm b/src/roms/george.asm index 0c57541..2ed46e1 100644 --- a/src/roms/george.asm +++ b/src/roms/george.asm @@ -34,10 +34,10 @@ cleardisplay: sta $6700,y ; this goes slightly over but it's fine iny bne cleardisplay - ; cli + cli main: - jsr printtext + ; jsr printtext ; key_zero: ; stz keyboard_cache, x ; dex @@ -45,21 +45,9 @@ main: ; fim: ; cli ; bra fim + jsr keyboard jmp main -printtext: - ldx 0 - loop: - lda text, x - beq end - sta $6000, x - inx - bra loop - end: - rts - -text: - .asciiz "hi <3" keyboard: ldy #0 @@ -171,7 +159,7 @@ isr: ; interrupt service routine pha phx phy - ; jsr irq + ; jsr keyboard ply plx pla diff --git a/src/roms/george.rom b/src/roms/george.rom index e161e97..a7091a8 100644 Binary files a/src/roms/george.rom and b/src/roms/george.rom differ diff --git a/src/roms/keyboard.asm b/src/roms/keyboard.asm index bef677a..96a8060 100644 --- a/src/roms/keyboard.asm +++ b/src/roms/keyboard.asm @@ -10,39 +10,31 @@ reset: sei ldx #0; initialize data stack pointer -; initdisplay: -; lda #0 -; ldy #0 +initdisplay: + lda #0 + ldy #0 -; cleardisplay: -; sta $6000,y -; sta $6100,y -; sta $6200,y -; sta $6300,y -; sta $6400,y -; sta $6500,y -; sta $6600,y -; sta $6700,y ; this goes slightly over but it's fine -; iny -; bne cleardisplay - cli +cleardisplay: + sta $6000,y + sta $6100,y + sta $6200,y + sta $6300,y + sta $6400,y + sta $6500,y + sta $6600,y + sta $6700,y ; this goes slightly over but it's fine + iny + bne cleardisplay + ; cli main: - jsr test - ; lda key_buffer + jsr read_keys + lda key_buffer + sta $6000 ; lda $4400 ; sta $6000 - nop - nop - nop jmp main -test: - nop - nop - nop - rts - ; first, let's do the simplest case of just the letter a being pressed ; 1. check row 2 ($4402, where the a key is) for pressed keys ; 2. if any keys are pressed, check if the key is a (bit 0) @@ -113,8 +105,6 @@ fill: ; fills an area from (x1, y1) to (x2, y2) will character c, (n1: c n2: x1 jsr get_char_address irq: - lda $4400 - sta $6000 rts isr: ; interrupt service routine