summaryrefslogtreecommitdiff
path: root/commodore64/neo-layout.asm
blob: f404bf1a0724db6760f209db40187b0ab91975e5 (plain)
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