-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathlibCommandCommand.asm
More file actions
155 lines (142 loc) · 4.05 KB
/
libCommandCommand.asm
File metadata and controls
155 lines (142 loc) · 4.05 KB
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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
;*******************************************************************************
;* Command Operation *
;*******************************************************************************
;* Syntax : C (opcode)<RETURN>
;*******************************************************************************
COM_COMMAND
ldy #0 ; Initialise Index
@COMMAND1
jsr INPUT_COMMAND ; Get Command Character
sta COM_TEXT,y ; Store into Buffer
iny ; Increase Index
cpy #3 ; Only capture 3 characters
bne @COMMAND1 ; No, not hit 3 yet
jsr PrintCarrageReturnAndLineFeed ; Print Line
lda #<OPCodes ; Initialise OpCode Array Lo
sta HT
lda #>OPCodes ; Initialise OpCode Array Hi
sta HT + 1
COM1
ldy #0 ; Initialise Index
COM2
lda (HT),y ; Get Character From Array
cmp #0 ; Are we at end Of array
beq COM9 ; Yes, then Jump Out
cmp COM_TEXT,y ; Compare with Buffer Text Item
bcc COM4 ; If less then goto next OpCode
beq COM9 ; If Equal, test next character
jmp READY ; No OpCode Found, Jump to Ready Prompt
COM9
iny ; Increase Index
cpy #3 ; Have we hit 3 characters
bne COM2 ; Nope, continue testing
lda (HT),y ; Load Mode from array
sta COM_MODE ; Store in Command Mode
jmp COM6 ; Goto Display OpCode Variants
COM4
clc
lda HT ; Add 5 to OpCode Array for next opcode
adc #5
sta HT
bcc COM10
inc HT + 1
COM10
jmp COM1 ; Search New Opcode
COM6
lda COM_MODE ; Load Command Mode
sec
sbc #MODE_IMPLIED ; Subtract First Mode to create index
sta COM_MODE ; Store back into Command Mode
asl ; multiply by 2
tax ; Move to X Index
lda DISASSEMBLE_JUMP_TABLE,x ; Get Lo Byte Jump Location
sta MODE_JUMP_VEC ; Store away
lda DISASSEMBLE_JUMP_TABLE+1,x ; Get Hi Byte Jump Location
sta MODE_JUMP_VEC + 1 ; Store away
lda #<PLACE-1 ; Load Demo Address Location Lo
sta ADDVEC ; Store In Address Lo
lda #>PLACE ; Load Demo Address Location Hi
sta ADDVEC + 1 ; Store In Address Hi
lda HT + 1
sta DIS_END + 1
lda HT
sta DIS_END
ldy #0 ; initialise Index
COM8
lda COM_TEXT,y ; Load OpCode Character
jsr krljmp_CHROUT$ ; Print Character
iny ; Increase Y
cpy #3 ; Dont Pass 3 characters
bne COM8 ; Go back for next character
jsr SPACE ; Print Space
COM7
jsr JSRG ; GoSub Jump Vector
sec
jsr krljmp_PLOT$ ; Get Cursor Location
clc
ldy #12 ; Change Y Position to Col 12
jsr krljmp_PLOT$ ; Set New Cursor Location
lda COM_mode ; Load OpCode Mode
asl ; Multiply by 2
tax ; Transfer to X
lda COM_CTXT+1,x ; Load Control Text Vector Hi
tay ; Move To Y
lda COM_CTXT,x ; Load Control Text Vector Lo
jsr bas_PrintString$; Print The String @ Location Y*256+A
jsr PrintCarrageReturnAndLineFeed ; Print Line
lda DIS_END + 1
sta HT + 1
lda DIS_END
sta HT
jmp COM4 ; Is there another Mode to show
PLACE
WORD $dcba
COM_CTXT
WORD imp
WORD abs
WORD absx
WORD absy
WORD immi
WORD indi
WORD indx
WORD indy
WORD zer
WORD zerx
WORD zery
WORD rela
IMP
TEXT "implied/accumulator"
brk
ABS
TEXT "absolute"
brk
ABSX
TEXT "absolute,x"
brk
ABSY
TEXT "absolute,y"
brk
IMMI
TEXT "immediate"
brk
INDI
TEXT "indirect"
brk
INDX
TEXT "(indirect,x)"
brk
INDY
TEXT "(indirect),y"
brk
ZER
TEXT "zero-page"
brk
ZERX
TEXT "zero-page,x"
brk
ZERY
TEXT "zero-page,y"
brk
RELA
TEXT "relative"
brk