mirror of
https://github.com/pevans/erc-c.git
synced 2025-02-25 14:29:13 +00:00
Add first work on keyboard support
Mainly the switch_read function, which had necessitated some work done in the vm_screen area
This commit is contained in:
parent
2b688c7815
commit
8d4283b1dc
7
include/apple2.kb.h
Normal file
7
include/apple2.kb.h
Normal file
@ -0,0 +1,7 @@
|
||||
#ifndef _APPLE2_KB_H_
|
||||
#define _APPLE2_KB_H_
|
||||
|
||||
#include "apple2.h"
|
||||
#include "vm_segment.h"
|
||||
|
||||
#endif
|
53
src/apple2.kb.c
Normal file
53
src/apple2.kb.c
Normal file
@ -0,0 +1,53 @@
|
||||
/*
|
||||
* apple2.kb.c
|
||||
*/
|
||||
|
||||
#include "apple2.kb.h"
|
||||
|
||||
SEGMENT_READER(apple2_kb_switch_read)
|
||||
{
|
||||
apple2 *mach = (apple2 *)_mach;
|
||||
char ch = '\0';
|
||||
|
||||
switch (addr) {
|
||||
case 0xC000:
|
||||
// This _also_ returns the 7 bit high if the strobe is still
|
||||
// set. Once you read from $C010, this bit will be cleared
|
||||
// in future reads--until another key is pressed.
|
||||
if (mach->screen) {
|
||||
ch = vm_screen_last_key(mach->screen);
|
||||
|
||||
// If the strobe is set, we need to set the 7 bit on the
|
||||
// return value. (NOTE: Apple II can only handle 7-bit
|
||||
// ASCII, so the highest bit (bit 7, if counting from
|
||||
// zero) is always low in regards to ASCII
|
||||
// representation; it can _only_ be high if the strobe
|
||||
// is set.
|
||||
if (mach->strobe) {
|
||||
return ch | 0x80;
|
||||
}
|
||||
}
|
||||
|
||||
// If we have no screen, we'll just end up returning
|
||||
// whatever is in ch already (NUL).
|
||||
return ch;
|
||||
|
||||
case 0xC010:
|
||||
// First, we need to clear the keyboard strobe.
|
||||
mach->strobe = false;
|
||||
|
||||
if (mach->screen) {
|
||||
// Now we need to return whether any key was pressed, but
|
||||
// we'll have to ask the vm_screen subsystem. We just want
|
||||
// to return with the 7 bit high if it is pressed, and all
|
||||
// zeroes if not.
|
||||
return vm_screen_key_pressed(mach->screen)
|
||||
? 0x80
|
||||
: 0x00;
|
||||
}
|
||||
|
||||
// We have no keyboard, so we basically can have no key
|
||||
// pressed down.
|
||||
return 0;
|
||||
}
|
||||
}
|
0
tests/apple2.kb.c
Normal file
0
tests/apple2.kb.c
Normal file
Loading…
x
Reference in New Issue
Block a user