-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdel2bs40.s
132 lines (125 loc) · 3.77 KB
/
del2bs40.s
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
********************************
* *
* DELETE KEY TO BACKSPACE *
* CONVERTER *
* *
* AUTHOR: BILL CHATFIELD *
* LICENSE: GPL *
* *
********************************
***********************************************************
* INPUT SUBROUTINE CALL SEQUENCE: *
* GETLN ($FD6A) - READS A LINE INTO IN ($200) LENGTH IN X *
* '->RDCHAR ($FD35) - HANDLES ESC SEQUENCES FOR 40 COLUMN *
* '->RDKEY ($FD0C) - READS CHAR INTO ACCUMULATOR *
* '->KSW ($38) - POINTS TO KEYIN ($FD1B) FOR 40-COL *
* OR BASICIN ($C305) FOR 80-COL, *
* DELHNDLR IN THIS FILE, OTHER OTHER *
* CUSTOM SUBROUTINE. BASICIN HANDLES *
* ESC SEQUENCES FOR 80-COLUMN. *
***********************************************************
ORG $300
TYP $06 ;BINARY TYPE
DSK del2bs40 ;OUTPUT FILE NAME
USE symbols
USE register.macs
USE string.macs
********************************
* *
* INSTALL VECTOR TO DEL2BS40 *
* SUBROUTINE *
* *
********************************
MAIN BIT RDALTCHAR
BMI EIGHTY
LDA #<DEL2BS40
STA KSWL
LDA #>DEL2BS40
STA KSWH
WRSTR LOADMSG
JMP DONE
EIGHTY WRSTR WRONGMODE
DONE RTS
********************************
* *
* KEYBOARD INPUT SUBROUTINE *
* *
* PRECONDITIONS: *
* 1. CURSOR AT CH & BASL *
* - only works with 40-col *
* 2. ACCUM = ORIG SCREEN BYTE *
* - only works with 40-col *
* 3. Y = VALUE IN CH *
* - only works with 40-col *
* *
* POSTCONDITIONS: *
* 1. MUST RETURN CHAR IN ACCUM *
* 2. X & Y MUST NOT BE CHANGED *
* *
********************************
DEL2BS40
STA CURSOR ;STORE THE ORIGINAL CURSOR CHAR
STY CURSPOS
JSR GETKEY ;STORE USER-ENTERED KEY IN A
JSR CONV_DELETE
STA KEY ;STORE IT BECAUSE A WILL GET WIPED
JSR REPLACE_CURSOR
LDA KEY ;SETUP RETURN VALUE
RTS
********************************
* *
* CONV_DELETE SUBROUTINE *
* *
* INPUTS: *
* A - CONTAINS A CHARACTER *
* *
* OUTPUTS: *
* A - BACKSPACE CHAR IF *
* ACCUMULATOR CONTAINED *
* A DELETE CHAR, OTHER- *
* WISE IT IS UNCHANGED *
* *
* REGISTERS: *
* A - CHANGED. SEE ABOVE *
* X - PRESERVED *
* Y - PRESERVED *
* *
********************************
CONV_DELETE
CMP #DELETE ;IS THE KEY IN A THE DELETE KEY
BNE D2BDONE
LDA #BKSPACE
D2BDONE RTS
********************************
* *
* REPLACE_CURSOR SUBROUTINE *
* *
* INPUTS: *
* CURSOR *
* CURSPOS *
* *
* OUTPUTS: *
* NONE *
* *
* REGISTERS: *
* A - CONTAINS CURSOR *
* X - PRESERVED *
* Y - CONTAINS CURSPOS *
* *
********************************
REPLACE_CURSOR
LDA CURSOR
LDY CURSPOS
STA (BASL),Y
RTS
********************************
* *
* DATA *
* *
********************************
LOADMSG ASC "LOADED DELETE TO BACKSPACE CONVERTER",0D,00
WRONGMODE
ASC "THIS WILL NOT WORK IN 80-COLUMN MODE",0D,00
KEY DB 0
CURSOR DB 0
CURSPOS DB 0