Reduce code and organize into subroutines
This commit is contained in:
parent
793b02cf94
commit
297fab0ef2
15
TODO
15
TODO
|
@ -1,9 +1,6 @@
|
||||||
1. Change to delkey.erase.bk
|
1. Split into 40-col and 80-col programs
|
||||||
2. Add delkey.reset
|
2. Have a loader that figures out if it's in 40 or 80 col mode and then
|
||||||
3. If not delete key then forward to previous keyboard routine
|
load the right code.
|
||||||
4. Don't change cursor. Keep whatever cursor exists at load time.
|
3. Make a release.
|
||||||
5. Create program to detect if the handler is loaded: delkey.detect?.
|
4. Go back to $300 load address once split into 2 programs. Each need to be
|
||||||
6. Add program to print explanation and instructions.
|
< 200 bytes to fit at that location.
|
||||||
7. Change subroutines to macros
|
|
||||||
8. Implement a better test for 80-column mode, possibly check cursor; if is delete char then 40-column mode
|
|
||||||
9. Add build and run instructions, explanation
|
|
||||||
|
|
266
del2bs.s
266
del2bs.s
|
@ -1,27 +1,28 @@
|
||||||
********************************
|
********************************
|
||||||
* *
|
* *
|
||||||
* DELETE KEY HANDLER *
|
* DELETE KEY TO BACKSPACE *
|
||||||
|
* CONVERTER *
|
||||||
* *
|
* *
|
||||||
* AUTHOR: BILL CHATFIELD *
|
* AUTHOR: BILL CHATFIELD *
|
||||||
* LICENSE: GPL *
|
* LICENSE: GPL *
|
||||||
* *
|
* *
|
||||||
********************************
|
********************************
|
||||||
|
|
||||||
*********************************************************
|
***********************************************************
|
||||||
* INPUT SUBROUTINE CALL SEQUENCE:
|
* INPUT SUBROUTINE CALL SEQUENCE: *
|
||||||
* GETLN ($FD6A) - READS A LINE INTO IN ($200) LENGTH IN X
|
* GETLN ($FD6A) - READS A LINE INTO IN ($200) LENGTH IN X *
|
||||||
* '->RDCHAR ($FD35) - HANDLES ESC SEQUENCES FOR 40 COLUMN
|
* '->RDCHAR ($FD35) - HANDLES ESC SEQUENCES FOR 40 COLUMN *
|
||||||
* '->RDKEY ($FD0C) - READS CHAR INTO ACCUMULATOR
|
* '->RDKEY ($FD0C) - READS CHAR INTO ACCUMULATOR *
|
||||||
* '->KSW ($38) - POINTS TO KEYIN ($FD1B) FOR 40-COL
|
* '->KSW ($38) - POINTS TO KEYIN ($FD1B) FOR 40-COL *
|
||||||
* OR BASICIN ($C305) FOR 80-COL,
|
* OR BASICIN ($C305) FOR 80-COL, *
|
||||||
* DELHNDLR IN THIS FILE, OTHER OTHER
|
* DELHNDLR IN THIS FILE, OTHER OTHER *
|
||||||
* CUSTOM SUBROUTINE. BASICIN HANDLES
|
* CUSTOM SUBROUTINE. BASICIN HANDLES *
|
||||||
* ESC SEQUENCES FOR 80-COLUMN.
|
* ESC SEQUENCES FOR 80-COLUMN. *
|
||||||
*********************************************************
|
***********************************************************
|
||||||
|
|
||||||
ORG $803
|
ORG $803
|
||||||
TYP $06 ;BINARY TYPE
|
TYP $06 ;BINARY TYPE
|
||||||
DSK del2bs ;OUTPUT FILE NAME
|
DSK del2bs ;OUTPUT FILE NAME
|
||||||
|
|
||||||
WINWIDTH EQU $21
|
WINWIDTH EQU $21
|
||||||
CH EQU $24 ;HORIZ CHAR POS (40-COL)
|
CH EQU $24 ;HORIZ CHAR POS (40-COL)
|
||||||
|
@ -143,7 +144,6 @@ POPYX mac
|
||||||
* ]1 - ADDRESS OF STRING *
|
* ]1 - ADDRESS OF STRING *
|
||||||
* *
|
* *
|
||||||
********************************
|
********************************
|
||||||
|
|
||||||
PUTS MAC
|
PUTS MAC
|
||||||
PUSHY
|
PUSHY
|
||||||
LDA #<]1 ;PUT LOW BYTE INTO A
|
LDA #<]1 ;PUT LOW BYTE INTO A
|
||||||
|
@ -152,90 +152,91 @@ PUTS MAC
|
||||||
POPY
|
POPY
|
||||||
<<<
|
<<<
|
||||||
|
|
||||||
PRINTHEX MAC
|
|
||||||
PHA
|
|
||||||
PUSHXY
|
|
||||||
lda ]1
|
|
||||||
JSR PRBYTE
|
|
||||||
POPYX
|
|
||||||
PLA
|
|
||||||
<<<
|
|
||||||
|
|
||||||
********************************
|
********************************
|
||||||
* *
|
* *
|
||||||
* INSTALL VECTOR TO HANDLER *
|
* INSTALL VECTOR TO DEL2BS *
|
||||||
* *
|
* *
|
||||||
********************************
|
********************************
|
||||||
|
MAIN LDA #<DEL2BS
|
||||||
MAIN LDA #<DEL2BS
|
STA KSWL
|
||||||
STA KSWL
|
LDA #>DEL2BS
|
||||||
LDA #>DEL2BS
|
STA KSWH
|
||||||
STA KSWH
|
PUTS LOADMSG
|
||||||
PUTS LOADMSG
|
RTS
|
||||||
RTS
|
|
||||||
|
|
||||||
********************************
|
********************************
|
||||||
* *
|
* *
|
||||||
* KEYBOARD INPUT SUBROUTINE *
|
* KEYBOARD INPUT SUBROUTINE *
|
||||||
* *
|
* *
|
||||||
* PRECONDITIONS: *
|
* PRECONDITIONS: *
|
||||||
* 1. CURSOR AT CH & BASL - only works with 40-col
|
* 1. CURSOR AT CH & BASL *
|
||||||
* 2. ACCUM = ORIG SCREEN BYTE - only works with 40-col
|
* - only works with 40-col *
|
||||||
* 3. Y = VALUE IN CH - 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: *
|
* POSTCONDITIONS: *
|
||||||
* 1. MUST RETURN CHAR IN ACCUM *
|
* 1. MUST RETURN CHAR IN ACCUM *
|
||||||
* 2. X & Y MUST NOT BE CHANGED *
|
* 2. X & Y MUST NOT BE CHANGED *
|
||||||
* *
|
* *
|
||||||
********************************
|
********************************
|
||||||
|
DEL2BS STA ORIGCURS ;STORE THE ORIGINAL CURSOR CHAR
|
||||||
|
STY CURSPOS
|
||||||
|
BIT RDALTCHAR ;TEST FOR 80-COL ON
|
||||||
|
BMI COL80
|
||||||
|
JSR DEL2BS40
|
||||||
|
JMP DONE
|
||||||
|
COL80 JSR DEL2BS80
|
||||||
|
DONE RTS
|
||||||
|
|
||||||
DEL2BS STA ORIGCURS ;STORE THE ORIGINAL CURSOR CHAR
|
********************************
|
||||||
STY CURSPOS
|
* *
|
||||||
PUSHY
|
* 40-COL DEL2BS SUBROUTINE *
|
||||||
|
* *
|
||||||
|
********************************
|
||||||
|
DEL2BS40
|
||||||
|
PUSHY
|
||||||
|
JSR GETKEY ;LOAD "KEY" VARIABLE
|
||||||
|
JSR CONV_DEL2BS
|
||||||
|
STA KEY ;STORE IT BECAUSE A WILL GET WIPED
|
||||||
|
LDA ORIGCURS
|
||||||
|
LDY CURSPOS
|
||||||
|
STA (BASL),Y ;REPLACE CURSOR
|
||||||
|
POPY
|
||||||
|
LDA KEY ;SETUP RETURN VALUE
|
||||||
|
RTS
|
||||||
|
|
||||||
LDA ORIGCURS ;FOLLOWING CODE NEEDS THIS
|
********************************
|
||||||
BIT RDALTCHAR ;TEST FOR 80-COL ON
|
* *
|
||||||
BMI COL80
|
* 80-COL DEL2BS SUBROUTINE *
|
||||||
|
* *
|
||||||
***********************************************************************
|
********************************
|
||||||
COL40 JSR GETKEY ;LOAD "KEY" VARIABLE
|
DEL2BS80
|
||||||
JSR CONV_DEL2BS
|
PUSHY
|
||||||
STA KEY ;STORE IT BECAUSE A WILL GET WIPED
|
LDY OURCH ;GET CURSOR POSITION
|
||||||
LDA ORIGCURS
|
JSR PICK ;GET CURSOR CHARACTER
|
||||||
LDY CURSPOS
|
STA CURSOR80 ;REMEMBER CURSOR CHARACTER
|
||||||
STA (BASL),Y ;REPLACE CURSOR
|
JSR INVERT ;INVERT CHAR AT CURSOR POSITION
|
||||||
JMP FINISH
|
NEXTKEY JSR GETKEY ;GET KEYBOARD KEY IN ACCUMULATOR
|
||||||
***********************************************************************
|
JSR CONV_DEL2BS
|
||||||
|
STA KEY ;REMEMBER WHAT KEY WAS TYPED
|
||||||
***********************************************************************
|
CMP #ESC ;IS IT ESC?
|
||||||
COL80
|
BNE NOT_ESC ;KEY IS NOT ESC
|
||||||
LDY OURCH ;GET CURSOR POSITION
|
JSR INVERT ;PREP FOR ESCAPING CURSOR
|
||||||
JSR PICK ;GET CURSOR CHARACTER
|
JSR HANDLE_ESC
|
||||||
STA CURSOR80 ;REMEMBER CURSOR CHARACTER
|
JMP DEL2BS80
|
||||||
JSR INVERT ;INVERT CHAR AT CURSOR POSITION
|
NOT_ESC CMP #RTARROW ;IS IT A RIGHT ARROW
|
||||||
|
BNE NOT_RT ;NOT RIGHT ARROW THEN DONE
|
||||||
NEXTKEY JSR GETKEY ;GET KEYBOARD KEY IN ACCUMULATOR
|
LDY OURCH ;GET HORIZONTAL CURSOR POSITION
|
||||||
JSR CONV_DEL2BS
|
JSR PICK ;GRAB CHAR FROM SCREEN
|
||||||
STA KEY ;REMEMBER WHAT KEY WAS TYPED
|
ORA #$80 ;SET HIGH BIT
|
||||||
CMP #ESC ;IS IT ESC?
|
STA KEY ;REMEMBER ARROW OVERED CHAR AS TYPED KEY
|
||||||
BNE NOT_ESC ;KEY IS NOT ESC
|
NOT_RT LDY OURCH ;SET CURSOR POSITION
|
||||||
JSR INVERT ;PREP FOR ESCAPING CURSOR
|
JSR INVERT ;CURSOR CHAR MUST BE IN A
|
||||||
JSR HANDLE_ESC
|
POPY ;RESTORE X AND Y
|
||||||
JMP COL80
|
LDA KEY ;LOAD RETURN VALUE
|
||||||
NOT_ESC CMP #RTARROW ;IS IT A RIGHT ARROW
|
RTS
|
||||||
BNE NOTRTARROW ;NOT RIGHT ARROW THEN DONE
|
|
||||||
RTARROWHIT 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
|
|
||||||
NOTRTARROW
|
|
||||||
LDY OURCH ;SET CURSOR POSITION
|
|
||||||
JSR INVERT ;CURSOR CHAR MUST BE IN A
|
|
||||||
***********************************************************************
|
|
||||||
|
|
||||||
FINISH POPY ;RESTORE X AND Y
|
|
||||||
LDA KEY ;LOAD RETURN VALUE
|
|
||||||
RTS
|
|
||||||
|
|
||||||
********************************
|
********************************
|
||||||
* *
|
* *
|
||||||
|
@ -248,88 +249,45 @@ FINISH POPY ;RESTORE X AND Y
|
||||||
* 1. KEY IS IN ACCUMULATOR *
|
* 1. KEY IS IN ACCUMULATOR *
|
||||||
* *
|
* *
|
||||||
********************************
|
********************************
|
||||||
|
CONV_DEL2BS
|
||||||
CONV_DEL2BS CMP #DELETE ;IS THE KEY IN A THE DELETE KEY
|
CMP #DELETE ;IS THE KEY IN A THE DELETE KEY
|
||||||
BNE D2BDONE
|
BNE D2BDONE
|
||||||
LDA #BKSPACE
|
LDA #BKSPACE
|
||||||
D2BDONE RTS
|
D2BDONE RTS
|
||||||
|
|
||||||
********************************
|
********************************
|
||||||
* *
|
* *
|
||||||
* PUTCHAR80 SUBROUTINE *
|
* HANDLE_ESC SUBROUTINE *
|
||||||
* *
|
|
||||||
* IN 80-COL MODE EVEN COLUMNS *
|
|
||||||
* ARE IN AUXILIARY MEMORY *
|
|
||||||
* WHILE ODD COLUMNS ARE IN *
|
|
||||||
* MAIN MEMORY. *
|
|
||||||
* *
|
|
||||||
* A - CHARACTER TO DISPLAY *
|
|
||||||
* Y - DESIRED COLUMN *
|
|
||||||
* *
|
* *
|
||||||
********************************
|
********************************
|
||||||
|
|
||||||
*PUTCHAR80
|
|
||||||
* PHA
|
|
||||||
* SEI ;DISABLE INTERRUPTS
|
|
||||||
* STA SET80COL ;ENABLE MAIN/AUX MEM SWITCHING
|
|
||||||
* TYA ;LOAD 80-COL HORIZ CURSOR POSITN
|
|
||||||
* LSR A ;DIVIDE BY 2 TO CALC PHYS COLUMN
|
|
||||||
* BCC AUXMEM ;IF EVEN, COLUMN IS IN AUX MEM
|
|
||||||
*MAINMEM STA PAGE2OFF ;TURN OFF AUX MEM, MAIN MEM ON
|
|
||||||
* JMP CONTINUE ;AVOID AUX MEM ENABLE
|
|
||||||
*AUXMEM STA PAGE2ON ;TURN ON AUX MEM, MAIN MEM OFF
|
|
||||||
*CONTINUE TAY ;MOVE CURSOR POSITION TO Y
|
|
||||||
* PLA ;LOAD THE CHARACTER TO DISPLAY
|
|
||||||
* STA (BASL),Y ;DISPLAY THE CHARACTER
|
|
||||||
* STA PAGE2OFF ;TURN MAIN MEM BACK ON
|
|
||||||
* CLI ;ENABLE INTERRUPTS
|
|
||||||
* RTS
|
|
||||||
|
|
||||||
HANDLE_ESC
|
HANDLE_ESC
|
||||||
JSR ESC_ON
|
PUSHY
|
||||||
JSR GETKEY
|
JSR ESC_ON
|
||||||
JSR ESC_OFF
|
JSR GETKEY
|
||||||
JSR UPSHFT
|
JSR ESC_OFF
|
||||||
AND #$7F
|
JSR UPSHFT
|
||||||
LDY #$10
|
AND #$7F
|
||||||
ESC2 CMP ESCTAB,Y
|
LDY #$10
|
||||||
BEQ ESC3
|
ESC2 CMP ESCTAB,Y
|
||||||
DEY
|
BEQ ESC3
|
||||||
BPL ESC2
|
DEY
|
||||||
BMI ESCSPEC
|
BPL ESC2
|
||||||
ESC3 LDA ESCCHAR,Y
|
JMP ESCDONE
|
||||||
AND #$7F
|
ESC3 LDA ESCCHAR,Y
|
||||||
JSR CTLCHAR
|
AND #$7F
|
||||||
LDA ESCCHAR,Y
|
JSR CTLCHAR
|
||||||
BMI HANDLE_ESC
|
LDA ESCCHAR,Y
|
||||||
RTS ;WAS JMP B.INPUT
|
BMI HANDLE_ESC
|
||||||
ESCSPEC TAY
|
ESCDONE POPY
|
||||||
LDA DOS33_MODE
|
RTS
|
||||||
CPY #$11
|
|
||||||
BNE ESCSP1
|
|
||||||
JSR X_NAK
|
|
||||||
LDA #$98
|
|
||||||
STA A2C_CHAR
|
|
||||||
RTS ;WAS JMP BIORET
|
|
||||||
ESCSP1 CPY #$05
|
|
||||||
BNE ESCSP4
|
|
||||||
AND #$DF
|
|
||||||
ESCSP2 STA DOS33_MODE
|
|
||||||
ESCSP3 RTS ;WAS JMP B.INPUT
|
|
||||||
ESCSP4 CPY #$04
|
|
||||||
BNE ESCSP3
|
|
||||||
ORA #$20
|
|
||||||
BNE ESCSP2
|
|
||||||
RTS ;DID NOT EXIST IN ORIGINAL
|
|
||||||
|
|
||||||
********************************
|
********************************
|
||||||
* *
|
* *
|
||||||
* DATA *
|
* DATA *
|
||||||
* *
|
* *
|
||||||
********************************
|
********************************
|
||||||
|
LOADMSG ASC "LOADED DELETE TO BACKSPACE CONVERTER",0D,"AT ADDRESS $803",0D,00
|
||||||
LOADMSG ASC "LOADED DELETE TO BACKSPACE CONVERTER",0D,"AT ADDRESS $803",0D,00
|
KEY DB 0
|
||||||
KEY DB 0
|
ORIGCURS DB 0
|
||||||
ORIGCURS DB 0
|
CURSPOS DB 0
|
||||||
CURSPOS DB 0
|
CURSOR80 DB 0
|
||||||
CURSOR80 DB 0
|
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
HANDLE_ESC
|
||||||
|
JSR ESC_ON
|
||||||
|
JSR GETKEY
|
||||||
|
JSR ESC_OFF
|
||||||
|
JSR UPSHFT
|
||||||
|
AND #$7F
|
||||||
|
LDY #$10
|
||||||
|
ESC2 CMP ESCTAB,Y
|
||||||
|
BEQ ESC3
|
||||||
|
DEY
|
||||||
|
BPL ESC2
|
||||||
|
BMI ESCSPEC
|
||||||
|
ESC3 LDA ESCCHAR,Y
|
||||||
|
AND #$7F
|
||||||
|
JSR CTLCHAR
|
||||||
|
LDA ESCCHAR,Y
|
||||||
|
BMI HANDLE_ESC
|
||||||
|
RTS ;WAS JMP B.INPUT
|
||||||
|
ESCSPEC TAY
|
||||||
|
LDA DOS33_MODE
|
||||||
|
CPY #$11
|
||||||
|
BNE ESCSP1
|
||||||
|
JSR X_NAK
|
||||||
|
LDA #$98
|
||||||
|
STA A2C_CHAR
|
||||||
|
RTS ;WAS JMP BIORET
|
||||||
|
ESCSP1 CPY #$05
|
||||||
|
BNE ESCSP4
|
||||||
|
AND #$DF
|
||||||
|
ESCSP2 STA DOS33_MODE
|
||||||
|
ESCSP3 RTS ;WAS JMP B.INPUT
|
||||||
|
ESCSP4 CPY #$04
|
||||||
|
BNE ESCSP3
|
||||||
|
ORA #$20
|
||||||
|
BNE ESCSP2
|
||||||
|
RTS ;DID NOT EXIST IN ORIGINAL
|
|
@ -0,0 +1,30 @@
|
||||||
|
********************************
|
||||||
|
* *
|
||||||
|
* PUTCHAR80 SUBROUTINE *
|
||||||
|
* *
|
||||||
|
* IN 80-COL MODE EVEN COLUMNS *
|
||||||
|
* ARE IN AUXILIARY MEMORY *
|
||||||
|
* WHILE ODD COLUMNS ARE IN *
|
||||||
|
* MAIN MEMORY. *
|
||||||
|
* *
|
||||||
|
* A - CHARACTER TO DISPLAY *
|
||||||
|
* Y - DESIRED COLUMN *
|
||||||
|
* *
|
||||||
|
********************************
|
||||||
|
|
||||||
|
PUTCHAR80
|
||||||
|
PHA
|
||||||
|
SEI ;DISABLE INTERRUPTS
|
||||||
|
STA SET80COL ;ENABLE MAIN/AUX MEM SWITCHING
|
||||||
|
TYA ;LOAD 80-COL HORIZ CURSOR POSITN
|
||||||
|
LSR A ;DIVIDE BY 2 TO CALC PHYS COLUMN
|
||||||
|
BCC AUXMEM ;IF EVEN, COLUMN IS IN AUX MEM
|
||||||
|
MAINMEM STA PAGE2OFF ;TURN OFF AUX MEM, MAIN MEM ON
|
||||||
|
JMP CONTINUE ;AVOID AUX MEM ENABLE
|
||||||
|
AUXMEM STA PAGE2ON ;TURN ON AUX MEM, MAIN MEM OFF
|
||||||
|
CONTINUE TAY ;MOVE CURSOR POSITION TO Y
|
||||||
|
PLA ;LOAD THE CHARACTER TO DISPLAY
|
||||||
|
STA (BASL),Y ;DISPLAY THE CHARACTER
|
||||||
|
STA PAGE2OFF ;TURN MAIN MEM BACK ON
|
||||||
|
CLI ;ENABLE INTERRUPTS
|
||||||
|
RTS
|
Loading…
Reference in New Issue