1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
;NEO-Layout für C64
;(C) 2005 Hanno Behrens (pebbles@schattenlauf.de)
;unter GPL
;Alpha-Release 0.1
!to "neo-layout.prg"
!source <C64/BASIC2.a>
*=$0801
dest =$c000
ptr1 =$f7
ptr2 =$f9
zp_pkeydec =$028f
zp_keymap =$f5
k_keydec =$eb48
k_keytablen =$41
k_keytab1 =$eb81
k_keytab2 =$ebc2
k_keytab3 =$ec03
k_keytab4 =$ec78
k_decode =$eae0
;Header generieren
!word endline ;Zeiger auf nächste Zeile
!word 2005 ;Zeilennummer
+b_SYS
!tx "2061",0
endline !word 0
;Ende Header
setup:
ldy #0 ;kopiere neo nach dest
set1: lda neoentry,y
sta dest,y
lda neoentry+$100,y
sta dest+$100,y
iny
bne set1
sei ;setze keydecoder
lda #<dest
sta zp_pkeydec
lda #>dest
sta zp_pkeydec+1
cli
rts
neoentry:
lda $028d ;Flag Shift CTRL Commodore
cmp #$03
bne l1 ;Zeiger auf Dekodiertabellen berechnen
cmp $028e
beq abfrage_default
lda $0291 ;Shift-Commodore erlaubt?
bmi fertig ;nein, zurück zur Dekodierung
lda $d018 ;Shift/Commodore
eor #$02 ;Umschaltung Klein/Großschreibung
sta $d018
jmp fertig
l1 asl
cmp #$08
bcc l2
lda #$06
l2 tax
lda tableptr-neoentry+dest,x
sta zp_keymap ;Zeiger auf Tastatur-Dekodiertabellen lesen
lda tableptr-neoentry+dest+1,x
sta zp_keymap+1
fertig: jmp k_decode ;zurück zur Dekodierung
abfrage_default:
lda #$7f
sta $dc00
rts
tableptr:
!word table1-neoentry+dest, table2-neoentry+dest
!word table3-neoentry+dest, table4-neoentry+dest
!ct pet
table1 ;Tastatur-Dekodierung, ungeshiftet
!by $14, $0d, $1d, $88, $85, $86, $87, $11
; !by "3", "w", "a", "4", "z", "s", "e", $01
!by "3", "v", "u", "4", "k", "i", "l", $01
; !by "5", "r", "d", "6", "c", "f", "t", "x"
!by "5", "c", "a", "6", "@", "e", "w", ">"
; !by "7", "y", "g", "8", "b", "h", "u", "v"
!by "7", "<", "o", "8", "z", "s", "h", "p"
; !by "9", "i", "j", "0", "m", "k", "o", "n"
!by "9", "g", "n", "0", "m", "r", "f", "b"
; !by "+", "p", "l", "-", ".", ":", "@", ","
!by "+", "j", "t", "-", ".", "d", "/", ","
; !by $5c, "*", ";", $13, $01, "=", $5e, "/"
!by $5c, "*", "y", $13, $01, "=", $5e, "x"
!by "1", $5f, $04, "2", " ", $02, "q", $03
!by $ff
table2 ;Tastatur-Dekodierung geshifted
!by $94, $8d, $9d, $8c, $89, $8a, $8b, $91
; !by "#", "W", "A", "$", "Z", "S", "E", $01
!by "#", "V", "U", "$", "K", "I", "L", $01
; !by "%", "R", "D", "&", "C", "F", "T", "X"
!by "%", "C", "A", "&", $ba, "E", "W", "]"
; !by "'", "Y", "G", "(", "B", "H", "U", "V"
!by "'", "[", "O", "(", "Z", "S", "H", "P"
; !by ")", "I", "J", "0", "M", "K", "O", "N"
!by ")", "G", "N", "0", "M", "R", "F", "B"
; !by $db, $d0, $cc, $dd, ">", "[", $ba, "<"
!by $db, $d0, $cc, $dd, ":", "D", "?", ";"
; !by $a9, $c0, "]", $93, $01, "=", $de, "?"
!by $a9, $c0, "Y", $93, $01, $3d, $de, "X"
!by $21, $5f, $04, $22, $a0, $02, "Q", $83
!by $ff
table3 ;Tastatur-Dekodierung mit C=-Taste
!by $94, $8d, $9d, $8c, $89, $8a, $8b, $91
!by $96, $b3, $b0, $97, $ad, $ae, $b1, $01
!by $98, $b2, $ac, $99, $bc, $bb, $a3, $bd
!by $9a, $b7, $a5, $9b, $bf, $b4, $b8, $be
!by $29, $a2, $b5, $30, $a7, $a1, $b9, $aa
!by $a6, $af, $b6, $dc, $3e, $5b, $a4, $3c
!by $a8, $df, $5d, $93, $01, $3d, $de, $3f
!by $81, $5f, $04, $95, $a0, $02, $ab, $83
!by $ff
table4 ;Tastatur-Dekodierung mit CTRL-Taste
!by $ff, $ff, $ff, $ff, $ff, $ff, $ff, $ff
!by $1c, $17, $01, $9f, $1a, $13, $05, $ff
!by $9c, $12, $04, $1e, $03, $06, $14, $18
!by $1f, $19, $07, $9e, $02, $08, $15, $16
!by $12, $09, $0a, $92, $0d, $0b, $0f, $0e
!by $ff, $10, $0c, $ff, $ff, $1b, $00, $ff
!by $1c, $ff, $1d, $ff, $ff, $1f, $1e, $ff
!by $90, $06, $ff, $05, $ff, $ff, $11, $ff
!by $ff
|