Programming:Keyboard redefinition
From CPCWiki - THE Amstrad CPC encyclopedia!
Revision as of 03:14, 15 January 2014 by Fano (Talk | contribs) (Created page with "<pre> ;simple keyboard module ;no extra functions , just scan and locate a key ;no char buffer , no antibounce, ect... ;SJASM syntax MODULE key ;do a complete key scan and...")
;simple keyboard module ;no extra functions , just scan and locate a key ;no char buffer , no antibounce, ect... ;SJASM syntax MODULE key ;do a complete key scan and store it at (HL) ;altered : AF - BC - DE Scan push HL ld BC,#F782 out (C),C ld BC,#F40e ld E,B out (C),C ld BC,#F6c0 ld D,B out (C),C ld C,0 out (C),C ld BC,#F792 out (C),C ld A,#40 ld C,#4A .loop ld B,D out (C),A ld B,E ini inc A cp C jr c,.loop ld BC,#F782 out (C),C pop HL ret ;check if there is a key is down at (HL);only the first key found is returned ;return carry is a key is down ;return key code in A : key code = (line*8)+bit ;returned code is the same than system ;altered : AF - BC GetPressed push HL ld C,10.loop_col ld B,8 ld A,(HL++).loop_bit rla jr nc,.pressed djnz .loop_bit dec C jr nz,.loop_col or A ;no key found ! pop HL ret .pressed dec C ld A,9 sub C add A ;*2 add A ;*4 add A ;*8 dec B or B ;add bit scf ;key found ! pop HL ret ;check if a key is pressed ;A = key code ;HL = 10 byte array scanned with Scan function ;return key state in carry ;altered AF - DE - B IsPressed push HL push AF ; keep bit and %01111000 rrca rrca rrca ld E,A ld D,0 add HL,DE ;so we get the address pop AF ;now get the and 7 inc A ld B,A ld A,(HL) ;get line .loop rra ;get bit in carry djnz .loop ccf ;reverse bit pop HL ret ;compute offset and mask for a key ;A = key code ;return offset in C and mask in B ;altered AF - BC GetMask ld B,A ;get offset and %01111000 rrca rrca rrca ld C,A ;get mask ld A,B and %00000111 ld B,A ld A,1 jr z,.done .loop add A djnz .loop .done ld B,A ret ;erase SHIFT and CONTROL status ;used when that can be a problem , like with IsPressed ;HL = 10 byte array scanned with Scan function ;altered : AF IgnoreSHITFCTRL push HL inc HL inc HL ld A,(HL) or %10100000 ld (HL),A pop HL ret ENDMODULE