Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!utgpu!water!watmath!clyde!cbosgd!ihnp4!inuxc!iuvax!pur-ee!j.cc.purdue.edu!ain From: ain@j.cc.purdue.edu.UUCP Newsgroups: comp.sources.amiga Subject: Keymap (usa1) Message-ID: <5840@j.cc.purdue.edu> Date: Sat, 21-Nov-87 13:46:45 EST Article-I.D.: j.5840 Posted: Sat Nov 21 13:46:45 1987 Date-Received: Mon, 23-Nov-87 02:37:46 EST Organization: PUCC Land, USA Lines: 461 Approved: ain@j.cc.purdue.edu (Pat White) Program Name: Keymap usa1 Submitted By: bryce%hoser.Berkeley.EDU@berkeley.edu (Bryce Nesbitt) Summary: Source to keymap -- Must use Metacompco assembler to compile it (Manx "as" won't work) Poster Boy: Pat White (ain@j.cc.purdue.edu) Untested. NOTES: This keymap will compile under Manx "as", but will not work (Manx apparently adds something to the file). It will compile and work with the Metacompco assembler. -- Pat White (co-moderator comp.sources/binaries.amiga) UUCP: k.cc.purdue.edu!ain BITNET: PATWHITE@PURCCVM PHONE: (317) 743-8421 U.S. Mail: 320 Brown St. apt. 406, West Lafayette, IN 47906 ---------------------------------------- * * keymap "usa1" or "usa1_swapesc" * * This file was generated from a binary image that is Copyright (C)1987 * Commodore-Amiga, Inc. It is distributed as an example with the * expressed written permission of Commodore-Amiga, Inc. * * This will assemble to the "usa1" keymap. Includes some IF's to make cetain * changes: * * The ESCAPE key and the ~` key may be reversed. * The RETURN key may be set to repeat (the ENTER key still will not). * * And to fix two glitches in the map as it comes from CBM: * * The A500/A2000 numeric pad ()/*+ keys will repeat. * The keymap no longer crashes if an attempt to execute it is made. * * This keymap supports the extra keys found on the Amiga 500 and 2000 * and will work on A1000s as well. * * NOTE: Some programs don't support keymaps. Those programmers need to learn * about the console.device's RawKeyConvert() and it's big brother * DeadKeyConvert(). These take RAWKEY messages and run the conversion * process. * The "Amiga Enhancer Manual", which came with the V1.1 to * V1.2 upgrade kit, contains some essential information and source code to * DeadKeyConvert(). Beg, borrow, buy or steal a copy of this... it is * full of other useful information as well. * * Commodore-Amiga made what might be refered to as a "tactical error" with * keymaps... it is easier to just use the raw keys rather than converting * them. This is *not* an excuse for doing it, however. * * * File format hacked out by Bryce Nesbitt, bryce@hoser.berkeley.EDU * ucbvax!hoser!bryce * cheers! (or replace "hoser" with "cogsci") * OLDMAP EQU 0 ;assemble %100 usa1 keymap FIXUP EQU 0 ;Should I fix the glitches in the CBM keymap? RETURNREP EQU 0 ;Do the above and have reutrn repeat? SWAPESC EQU 1 ;Do the above and swap the ESC and ~` keys? ; ;You must set one and only one flag! ; * * Keymaps are loaded with the LoadSeg() function. This provides * all of the automatic relocation features. The file starts off with * a KeyMapNode structure. Since the first long of this (LN_SUCC) will * be dynamically set after the map is loaded, we can safely insert a bit of * code to drop harmlessly back to DOS in case someone tries to execute the * keymap (the unmodified keymap would crash). * ; ; STRUCTURE KeyMapNode,0 ; STRUCT kn_Node,LN_SIZE ; includes name of keymap ; STRUCT kn_KeyMap,km_SIZEOF ; I suspect) ; LABEL kn_SIZEOF ; ; STRUCTURE KeyMap,0 ; APTR km_LoKeyMapTypes ; APTR km_LoKeyMap ; APTR km_LoCapsable ; APTR km_LoRepeatable ; APTR km_HiKeyMapTypes ; APTR km_HiKeyMap ; APTR km_HiCapsable ; APTR km_HiRepeatable ; LABEL km_SIZEOF ; CODE IFNE OLDMAP DC.L $00000000 ;Crash the system. ENDC IFEQ OLDMAP MOVEQ.L #-1,D0 ;Say "I'm not a program" RTS ;return to DOS with that revelation. ENDC DC.L $00000000 DC.W $0000 DC.L KeyMapName DC.L LoKeyMapTypes DC.L LoKeyMap DC.L LoCapsable DC.L LoRepeatable DC.L HiKeyMapTypes DC.L HiKeyMap DC.L HiCapsable DC.L HiRepeatable * * The following are bitmaps, one bit per key, same order as everything else. * LoCapsable: DC.B $00,$00,$FF,$03,$FF,$01,$FE,$00 IFNE OLDMAP HiCapsable: DC.B $00,$00,$00,$00,$00,$00,$00 ENDC IFEQ OLDMAP HiCapsable: DC.B $00,$00,$00,$00,$00,$00,$00 ;manual says 8 bytes ENDC IFNE OLDMAP+FIXUP+RETURNREP LoRepeatable: DC.B $FF,$BF,$FF,$EF,$FF,$EF,$FF,$F7 ENDC IFNE SWAPESC LoRepeatable: DC.B $FE,$BF,$FF,$EF,$FF,$EF,$FF,$F7 ENDC IFNE OLDMAP HiRepeatable: DC.B $47,$F4,$FF,$03,$00,$00,$00 ENDC IFNE FIXUP HiRepeatable: DC.B $47,$F4,$FF,$7F,$00,$00,$00 ;manual says 8 bytes ENDC IFNE RETURNREP HiRepeatable: DC.B $57,$F4,$FF,$7F,$00,$00,$00 ;manual says 8 bytes ENDC IFNE SWAPESC HiRepeatable: DC.B $77,$F4,$FF,$7F,$00,$00,$00 ;manual says 8 bytes ENDC ;LoCapsable: DC.B $00,$00,$FF,$03,$FF,$01,$FE,$00 ;HiCapsable: DC.B $00,$00,$00,$00,$00,$00,$00 ;LoRepeatable: DC.B $FF,$BF,$FF,$EF,$FF,$EF,$FF,$F7 ;HiRepeatable: DC.B $47,$F4,$FF,$03,$00,$00,$00 ; KC_NOQUAL EQU $00 ; KCF_SHIFT EQU $01 ; KCF_ALT EQU $02 ; KCF_CONTROL EQU $04 ; KC_VANILLA EQU $07 ; note that SHIFT+ALT+CTRL is VANILLA ; KCF_DOWNUP EQU $08 ; ???Don't know... gives "qQ" if applied to q. ; KCF_DEAD EQU $20 ; Indicates dead information is available ; KCF_STRING EQU $40 ; Key may actually print out a string ; KCF_NOP EQU $80 ; Don't map this key ; LoKeyMapTypes: IFNE SWAPESC DC.B $02,$03,$07,$03,$03,$03,$07,$03 ; ` 1 2 3 4 5 6 7 ENDC IFEQ SWAPESC DC.B $07,$03,$07,$03,$03,$03,$07,$03 ; ` 1 2 3 4 5 6 7 ENDC DC.B $03,$03,$03,$07,$01,$07,$80,$00 ; 8 9 0 - = \ (0) DC.B $07,$07,$27,$07,$07,$27,$27,$27 ; q w e r t y u i DC.B $27,$07,$07,$07,$80,$00,$00,$00 ; o p [ ] (1)(2)(3) DC.B $27,$07,$07,$27,$27,$27,$27,$27 ; a s d f g h j k DC.B $07,$01,$01,$80,$80,$00,$00,$00 ; l ; ' (4)(5)(6) DC.B $03,$07,$07,$07,$07,$07,$27,$07 ; z x c v b n m DC.B $01,$01,$01,$80,$00,$00,$00,$00 ; , . / . (7)(8)(9) HiKeyMapTypes: IFNE SWAPESC DC.B $22,$00,$41,$00,$04,$07,$00,$80 ;SPC BS TAB ENTR RETN ESC DEL NONE ENDC IFEQ SWAPESC DC.B $22,$00,$41,$00,$04,$02,$00,$80 ;SPC BS TAB ENTR RETN ESC DEL NONE ENDC DC.B $80,$80,$00,$80,$41,$41,$41,$41 ; - UP DOWN RGHT LEFT DC.B $41,$41,$41,$41,$41,$41,$41,$41 ;F1 F2 F3 F4 F5 F6 F7 F8 DC.B $41,$41,$03,$03,$03,$03,$03,$40 ;F9 F10 HELP DC.B $80,$80,$80,$80,$80,$80,$80,$80 ;LSFT RSFT CAPS CTRL LALT RALT LAMG RAMG DC.B $80,$80,$80,$80,$80,$80,$80,$80 ; DC.B $80,$80,$80,$80,$80,$80,$80,$80 ; LoKeyMap: IFNE SWAPESC DC.L $00009B1B,$21B92131 ; '~`~`!',$B9,'!1' ENDC IFEQ SWAPESC DC.L $7E607E60,$21B92131 ; '~`~`!',$B9,'!1' ENDC DC.L $40B24032,$23B32333 ; '@',$B2,'@2#',$B3,'#3' DC.L $24A22434,$25BC2535 ; '$',$A2,'$4%',$BC,'%5' DC.L $5EBD5E36,$26BE2637 ; '^',$BD,'^6&',$BE,'&7' DC.L $2AB72A38,$28AB2839 ; '*',$B7,'*8(',$AB,'(9' DC.L $29BB2930,$5F2D5F2D ; ')',$BB,')0_-_-' DC.L $2B3D2B3D,$7C5C7C5C ; '+=+=|\|\' DC.L $00000000,$00000030 ; $00,$00,$00,$00,$00,$00,$00,'0' DC.L $C5E55171,$B0B05777 ; $C5,$E5,'Qq',$B0,$B0,'Ww' DC.L keydata12e DC.L $AEAE5272,$DEFE5474 ; $AE,$AE,'Rr',$DE,$FE,'Tt' DC.L keydata15y DC.L keydata16u DC.L keydata17i DC.L keydata18o DC.B $B6,$B6,$50,$70,$7B,$5B,$7B,$5B ; $B6,$B6,'Pp{[{[' DC.B $7D,$5D,$7D,$5D,$00,$00,$00,$00 ; '}]}]',$00,$00,$00,$00 DC.B $00,$00,$00,$31,$00,$00,$00,$32 ; $00,$00,$00,'1',$00,$00,$00,'2' DC.B $00,$00,$00,$33 ; $00,$00,$00,'3' DC.L keydata20a DC.B $A7,$DF,$53,$73,$D0,$F0,$44,$64 ; $A7,$DF,'Ss',$D0,$F0,'Dd' DC.L keydata23f DC.L keydata24g DC.L keydata25h DC.L keydata26j DC.L keydata27k DC.B $A3,$A3,$4C,$6C,$3A,$3B,$3A,$3B ; $A3,$A3,'Ll:;:;' DC.B $22,$27,$22,$27,$00,$00,$00,$00 ; '"'"'',$00,$00,$00,$00 DC.B $00,$00,$00,$00,$00,$00,$00,$34 ; $00,$00,$00,$00,$00,$00,$00,'4' DC.B $00,$00,$00,$35,$00,$00,$00,$36 ; $00,$00,$00,'5',$00,$00,$00,'6' DC.B $BB,$AB,$3E,$3C,$AC,$B1,$5A,$7A ; $BB,$AB,'><',$AC,$B1,'Zz' DC.B $F7,$D7,$58,$78,$C7,$E7,$43,$63 ; $F7,$D7,'Xx',$C7,$E7,'Cc' DC.B $AA,$AA,$56,$76,$BA,$BA,$42,$62 ; $AA,$AA,'Vv',$BA,$BA,'Bb' DC.L keydata36n DC.B $BF,$B8,$4D,$6D,$3C,$2C,$3C,$2C ; $BF,$B8,'Mm<,<,' DC.B $3E,$2E,$3E,$2E,$3F,$2F,$3F,$2F ; '>.>.?/?/' DC.B $00,$00,$00,$00,$00,$00,$00,$2E ; $00,$00,$00,$00,$00,$00,$00,'.' DC.B $00,$00,$00,$37,$00,$00,$00,$38 ; $00,$00,$00,'7',$00,$00,$00,'8' DC.B $00,$00,$00,$39 ; $00,$00,$00,'9' HiKeyMap: DC.L keydata40space ;SPC DC.L $00000008 ;DEL DC.L keydata42tab ;TAB DC.L $0000000D,$00000A0D ;ENT RET IFNE SWAPESC DC.L $7E607E60,$0000007F ;ESC DEL ENDC IFEQ SWAPESC DC.L $00009B1B,$0000007F ;ESC DEL ENDC DC.L $00000000,$00000000 DC.L $00000000 DC.L $0000002D ; - DC.L $00000000 DC.L keydata4Cup DC.L keydata4Ddown DC.L keydata4Eright DC.L keydata4Fleft DC.L L00001B ; F1 DC.L L00001C ; ... DC.L L00001D DC.L L00001E DC.L L00001F DC.L L000020 DC.L L000021 DC.L L000022 DC.L L000023 ; ... DC.L L000024 ; F10 DC.B $28,$28,$28,$28,$29,$29,$29,$29 ; '(((())))' DC.B $2F,$2F,$2F,$2F,$2A,$2A,$2A,$2A ; '////****' DC.B $2B,$2B,$2B,$2B ; '++++' DC.L keydata5Fhelp DC.L $00000000,$00000000 DC.L $00000000,$00000000 DC.L $00000000,$00000000 DC.L $00000000,$00000000 DC.L $00000000,$00000000 DC.L $00000000,$00000000 DC.L $00000000,$00000000 DC.L $00000000,$00000000 DC.L $00000000,$00000000 DC.L $00000000,$00000000 DC.L $00000000,$00000000 DC.L $00000000,$00000000 ;------ Dead Prefix Bytes ; DPB_MOD EQU $00 ; DPF_MOD EQU $01 ; DPB_DEAD EQU $03 ; DPF_DEAD EQU $08 ; ; DP_2DINDEXMASK EQU $0F ; mask for index for 1st of two dead keys ; DP_2DFACSHIFT EQU $04 ; shift for factor for 1st of two dead keys ; ; For a full description of Dead keys, see AmigaMail July/August 1987 ; ; ; These are all of the dead keys. ; keydata23f: ;accent acute=1 DC.B $00,$66,$00,$46,$08,$01,$08,$01 ; $00,'f',$00,'F',$08,$01,$08,$01 DC.B $00,$06,$00,$06,$00,$86,$00,$86 keydata24g: ;accent grave=2 DC.B $00,$67,$00,$47,$08,$02,$08,$02 ; $00,'g',$00,'G',$08,$02,$08,$02 DC.B $00,$07,$00,$07,$00,$87,$00,$87 keydata25h: ;caret=3 DC.B $00,$68,$00,$48,$08,$03,$08,$03 ; $00,'h',$00,'H',$08,$03,$08,$03 DC.B $00,$08,$00,$08,$00,$88,$00,$88 keydata26j: ;circumflex=4 DC.B $00,$6A,$00,$4A,$08,$04,$08,$04 ; $00,'j',$00,'J',$08,$04,$08,$04 DC.B $00,$0A,$00,$0A,$00,$8A,$00,$8A keydata27k: ;umlaut=5 DC.B $00,$6B,$00,$4B,$08,$05,$08,$05 ; $00,'k',$00,'K',$08,$05,$08,$05 DC.B $00,$0B,$00,$0B,$00,$8B,$00,$8B ; ; Here follows deadable keys ; keydata20a: DC.B $01,$10 ;unshifted accent "a" table starts at $10 DC.B $01,$16 ;shifted accent "A" table starts at $16 DC.B $00,$E6,$00,$C6,$00,$01,$00,$01,$00,$81,$00,$81 ;normal keys ;dead with- nothing,accent acute,accent grave,caret,circumflex,umlaut DC.B $61,$E1,$E0,$E2,$E3,$E4 ;'a' DC.B $41,$C1,$C0,$C2,$C3,$C4 ;'A' keydata12e: DC.B $01,$10 DC.B $01,$16,$00,$A9,$00,$A9 DC.B $00,$05,$00,$05,$00,$85,$00,$85 DC.B $65,$E9,$E8,$EA,$65,$EB,$45,$C9 ; 'e',$E9,$E8,$EA,'e',$EB,'E',$C9 DC.B $C8,$CA,$45,$CB ; $C8,$CA,'E',$CB keydata17i: DC.B $01,$10,$01,$16,$00,$A1,$00,$A6 DC.B $00,$09,$00,$09,$00,$89,$00,$89 DC.B $69,$ED,$EC,$EE,$69,$EF,$49,$CD ; 'i',$ED,$EC,$EE,'i',$EF,'I',$CD DC.B $CC,$CE,$49,$CF ; $CC,$CE,'I',$CF keydata36n: DC.B $01,$10,$01,$16,$00,$AD,$00,$AF DC.B $00,$0E,$00,$0E,$00,$8E,$00,$8E DC.B $6E,$6E,$6E,$6E,$F1,$6E,$4E,$4E ; 'nnnn',$F1,'nNN' DC.B $4E,$4E,$D1,$4E ; 'NN',$D1,'N' keydata18o: DC.B $01,$10,$01,$16,$00,$F8,$00,$D8 DC.B $00,$0F,$00,$0F,$00,$8F,$00,$8F DC.B $6F,$F3,$F2,$F4,$F5,$F6,$4F,$D3 ; 'o',$F3,$F2,$F4,$F5,$F6,'O',$D3 DC.B $D2,$D4,$D5,$D6 keydata16u: DC.B $01,$10,$01,$16,$00,$B5,$00,$B5 DC.B $00,$15,$00,$15,$00,$95,$00,$95 DC.B $75,$FA,$F9,$FB,$75,$FC,$55,$DA ; 'u',$FA,$F9,$FB,'u',$FC,'U',$DA DC.B $D9,$DB,$55,$DC ; $D9,$DB,'U',$DC keydata15y: DC.B $01,$10,$01,$16,$00,$A4,$00,$A5 DC.B $00,$19,$00,$19,$00,$99,$00,$99 DC.B $79,$FD,$79,$79,$79,$FF,$59,$DD ; 'y',$FD,'yyy',$FF,'Y',$DD DC.B $59,$59,$59,$59 ; 'YYYY' keydata40space: DC.B $01,$04,$00,$A0,$20,$B4,$60,$5E ; $01,$04,$00,$A0,' ',$B4,'`^' DC.B $7E,$A8 ; '~',$A8 ; ; Misc string output keys ; ; keydata42tab: DC.B $01,$04,$02,$05,$09,$9B,$5A ; $01,$04,$02,$05,$09,$9B,'Z' keydata4Cup: DC.B $02,$04,$02,$06,$9B,$41,$9B,$54 ; $02,$04,$02,$06,$9B,'A',$9B,'T' keydata4Ddown: DC.B $02,$04,$02,$06,$9B,$42,$9B,$53 ; $02,$04,$02,$06,$9B,'B',$9B,'S' keydata4Eright: DC.B $02,$04,$03,$06,$9B,$43,$9B,$20 ; $02,$04,$03,$06,$9B,'C',$9B,' ' DC.B $40 ; '@' keydata4Fleft: DC.B $02,$04,$03,$06,$9B,$44,$9B,$20 ; $02,$04,$03,$06,$9B,'D',$9B,' ' DC.B $41 ; 'A' ; ; Here start the function keys. These are all string output keys ; ; Strings keys consist of one byte of size then one byte of offset per ; needed entry. ; L00001B: DC.B $03,$04 ; 3 bytes long, 4 bytes from start DC.B $04,$07 ; 4 bytes long, 7 bytes from start DC.B $9B,$30,$7E ; 0~ DC.B $9B,$31,$30,$7E ; 10~ L00001C: DC.B $03,$04,$04,$07,$9B,$31,$7E,$9B ; $03,$04,$04,$07,$9B,'1~',$9B DC.B $31,$31,$7E ; '11~' L00001D: DC.B $03,$04,$04,$07,$9B,$32,$7E,$9B ; $03,$04,$04,$07,$9B,'2~',$9B DC.B $31,$32,$7E ; '12~' L00001E: DC.B $03,$04,$04,$07,$9B,$33,$7E,$9B ; $03,$04,$04,$07,$9B,'3~',$9B DC.B $31,$33,$7E ; '13~' L00001F: DC.B $03,$04,$04,$07,$9B,$34,$7E,$9B ; $03,$04,$04,$07,$9B,'4~',$9B DC.B $31,$34,$7E ; '14~' L000020: DC.B $03,$04,$04,$07,$9B,$35,$7E,$9B ; $03,$04,$04,$07,$9B,'5~',$9B DC.B $31,$35,$7E ; '15~' L000021: DC.B $03,$04,$04,$07,$9B,$36,$7E,$9B ; $03,$04,$04,$07,$9B,'6~',$9B DC.B $31,$36,$7E ; '16~' L000022: DC.B $03,$04,$04,$07,$9B,$37,$7E,$9B ; $03,$04,$04,$07,$9B,'7~',$9B DC.B $31,$37,$7E ; '17~' L000023: DC.B $03,$04,$04,$07,$9B,$38,$7E,$9B ; $03,$04,$04,$07,$9B,'8~',$9B DC.B $31,$38,$7E ; '18~' L000024: DC.B $03,$04,$04,$07,$9B,$39,$7E,$9B ; $03,$04,$04,$07,$9B,'9~',$9B DC.B $31,$39,$7E ; '19~' keydata5Fhelp: DC.B $03,$02,$9B,$3F,$7E ; $03,$02,$9B,'?~' KeyMapName: IFNE SWAPESC DC.B 'usa1_swapesc',0 ENDC IFEQ SWAPESC DC.B 'usa1',0 ENDC CNOP 0,2 END ------------------------------------------------------------ |\ /| . Ack! (NAK, SOH, EOT) {o O} . bryce@hoser.berkeley.EDU -or- ucbvax!hoser!bryce (") U "You can count how many seeds are in an Apple, but not how many Apples are in a seed." -Ken Kesey