diff --git a/blk/620 b/blk/620 index de07603..a3833c8 100644 --- a/blk/620 +++ b/blk/620 @@ -1,3 +1,4 @@ Sega Master System Recipe 622 VDP 630 PAD +640 KBD diff --git a/blk/640 b/blk/640 new file mode 100644 index 0000000..341b0a4 --- /dev/null +++ b/blk/640 @@ -0,0 +1,14 @@ +( kbd - implement (ps2kc) for SMS PS/2 adapter ) +: (ps2kcA) ( for port A ) +( Before reading a character, we must first verify that there +is something to read. When the adapter is finished filling its +'164 up, it resets the latch, which output's is connected to +TL. When the '164 is full, TL is low. Port A TL is bit 4 ) + 0xdc PC@ 0x10 AND IF 0 EXIT ( nothing ) THEN + 0x3f PC@ DROP 0b11011101 ( Port A TH output, low ) 0x3f PC! + 0xdc PC@ ( bit 3:0 go in 3:0 ) 0x0f AND ( n ) + 0b11111101 ( Port A TH output, high ) 0x3f PC! + 0xdc PC@ ( bit 3:0 go in 7:4 ) 0x0f AND 4 LSHIFT OR ( n ) + ( Port A/B reset ) 0xff 0x3f PC! +; + diff --git a/blk/641 b/blk/641 new file mode 100644 index 0000000..6574f05 --- /dev/null +++ b/blk/641 @@ -0,0 +1,11 @@ +: (ps2kcB) ( for port B ) + ( Port B TL is bit 2 ) + 0xdd PC@ 0x04 AND IF 0 EXIT ( nothing ) THEN + 0x3f PC@ DROP 0b01110111 ( Port B TH output, low ) 0x3f PC! + 0xdc PC@ ( bit 7:6 go in 1:0 ) 6 RSHIFT ( n ) + 0xdd PC@ ( bit 1:0 go in 3:2 ) 0x03 AND 2 LSHIFT OR ( n ) + 0b11110111 ( Port B TH output, high ) 0x3f PC! + 0xdc PC@ ( bit 7:6 go in 5:4 ) 0xc0 AND 2 RSHIFT OR ( n ) + 0xdd PC@ ( bit 1:0 go in 7:6 ) 0x03 AND 6 LSHIFT OR ( n ) + ( Port A/B reset ) 0xff 0x3f PC! +;