hehe the keyboard finally works
This commit is contained in:
		
							parent
							
								
									dcaeece7fa
								
							
						
					
					
						commit
						07d40c05d5
					
				
							
								
								
									
										11
									
								
								src/main.rs
								
								
								
								
							
							
						
						
									
										11
									
								
								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));
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											Binary file not shown.
										
									
								
							| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue