134 lines
3.5 KiB
ArmAsm
134 lines
3.5 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 del2bs80 ;OUTPUT FILE NAME
|
|
USE symbols
|
|
USE register.macs
|
|
USE string.macs
|
|
|
|
********************************
|
|
* *
|
|
* INSTALL VECTOR TO DEL2BS *
|
|
* SUBROUTINE *
|
|
* *
|
|
********************************
|
|
MAIN BIT RDALTCHAR
|
|
BPL FORTY
|
|
LDA #<DEL2BS80
|
|
STA KSWL
|
|
LDA #>DEL2BS80
|
|
STA KSWH
|
|
WRSTR LOADMSG
|
|
JMP DONE
|
|
FORTY WRSTR WRONGMODE
|
|
DONE RTS
|
|
|
|
********************************
|
|
* *
|
|
* 80-COL DEL2BS SUBROUTINE *
|
|
* *
|
|
********************************
|
|
DEL2BS80
|
|
PUSHY
|
|
LDY OURCH ;GET CURSOR POSITION
|
|
JSR PICK ;GET CURSOR CHARACTER
|
|
STA CURSOR80 ;REMEMBER CURSOR CHARACTER
|
|
JSR INVERT ;INVERT CHAR AT CURSOR POSITION
|
|
NEXTKEY JSR GETKEY ;GET KEYBOARD KEY IN ACCUMULATOR
|
|
JSR CONV_DEL2BS
|
|
STA KEY ;REMEMBER WHAT KEY WAS TYPED
|
|
CMP #ESC ;IS IT ESC?
|
|
BNE NOT_ESC ;KEY IS NOT ESC
|
|
|
|
JSR INVERT ;PREP FOR ESCAPING CURSOR
|
|
JSR HANDLE_ESC
|
|
JMP DEL2BS80
|
|
NOT_ESC CMP #RTARROW ;IS IT A RIGHT ARROW
|
|
BNE NOT_RT ;NOT RIGHT ARROW THEN DONE
|
|
LDY OURCH ;GET HORIZONTAL CURSOR POSITION
|
|
JSR PICK ;GRAB CHAR FROM SCREEN
|
|
ORA #$80 ;SET HIGH BIT
|
|
STA KEY ;REMEMBER ARROW OVERED CHAR AS TYPED KEY
|
|
NOT_RT LDY OURCH ;SET CURSOR POSITION
|
|
JSR INVERT ;CURSOR CHAR MUST BE IN A
|
|
POPY ;RESTORE X AND Y
|
|
LDA KEY ;LOAD RETURN VALUE
|
|
RTS
|
|
|
|
********************************
|
|
* *
|
|
* DEL2BS SUBROUTINE *
|
|
* *
|
|
* PRECONDITIONS: *
|
|
* 1. KEY IS IN ACCUMULATOR *
|
|
* *
|
|
* POSTCONDITIONS: *
|
|
* 1. KEY IS IN ACCUMULATOR *
|
|
* *
|
|
********************************
|
|
CONV_DEL2BS
|
|
CMP #DELETE ;IS THE KEY IN A THE DELETE KEY
|
|
BNE D2BDONE
|
|
LDA #BKSPACE
|
|
D2BDONE RTS
|
|
|
|
********************************
|
|
* *
|
|
* HANDLE_ESC SUBROUTINE *
|
|
* *
|
|
********************************
|
|
HANDLE_ESC
|
|
PUSHY
|
|
JSR ESC_ON
|
|
JSR GETKEY
|
|
JSR ESC_OFF
|
|
JSR UPSHFT
|
|
AND #$7F
|
|
LDY #$10
|
|
ESC2 CMP ESCTAB,Y
|
|
BEQ ESC3
|
|
DEY
|
|
BPL ESC2
|
|
JMP ESCDONE
|
|
ESC3 LDA ESCCHAR,Y
|
|
AND #$7F
|
|
JSR CTLCHAR
|
|
LDA ESCCHAR,Y
|
|
BMI HANDLE_ESC
|
|
ESCDONE POPY
|
|
RTS
|
|
|
|
********************************
|
|
* *
|
|
* DATA *
|
|
* *
|
|
********************************
|
|
LOADMSG ASC "LOADED DELETE TO BACKSPACE CONVERTER",0D,00
|
|
WRONGMODE
|
|
ASC "THIS WILL NOT WORK IN 40-COLUMN MODE",0D,00
|
|
KEY DB 0
|
|
ORIGCURS DB 0
|
|
CURSPOS DB 0
|
|
CURSOR80 DB 0
|