133 lines
3.8 KiB
ArmAsm
133 lines
3.8 KiB
ArmAsm
********************************
|
|
* *
|
|
* 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
|