Renamed source file again

This commit is contained in:
Bill Chatfield 2021-12-02 22:13:55 -05:00
parent dd888c3766
commit 3a69bebb12
1 changed files with 301 additions and 0 deletions

301
del2bs.s Normal file
View File

@ -0,0 +1,301 @@
********************************
* *
* DELETE KEY HANDLER *
* *
* 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 del2bs ;OUTPUT FILE NAME
WINWIDTH EQU $21
CH EQU $24 ;HORIZ CHAR POS (40-COL)
BASL EQU $28 ;BASE ADDR FOR CURR VIDEO LINE
KSWL EQU $38 ;KEYBOARD SWITCH LOW BYTE
KSWH EQU $39 ;KEYBOARD SWITCH HIGH BYTE
OURCH EQU $57B ;HORIZONTAL POSITION (80-COL)
OURCV EQU $5FB ;VERTICAL POSITION (80-COL)
KBD EQU $C000 ;KEYBOARD DATA + STROBE
CXROMOFF EQU $C006 ;ENABLE EXPANSION SLOTS AT $C100-$C7FF
CXROMON EQU $C007 ;ENABLE INTERNAL ROM AT $C100-$C7FF
RDCXROM EQU $C015 ;READ CXROM SWITCH (1 = SLOTS, 0 = ROM)
80COLOFF EQU $C00C ;Off: display 40 columns
80COLON EQU $C00D ;On: display 80 columns
ALTCHAROFF EQU $C00E ;USE PRIMARY CHARACTER SET
ALTCHARON EQU $C00F ;USE ALTERNATE CHARACTER SET
KBDSTRB EQU $C010 ;CLEAR KEYBOARD STROBE
RDALTCHAR EQU $C01E ;READ STATE OF Alt char set (1 = on)
RD80COL EQU $C01F ;READ 80COL SWITCH
COUT EQU $FDED ;WRITE A CHARACTER
* 80-COL SUBS
GETKEY EQU $C83B
INVERT EQU $CE26 ;TOGGLE NORMAL/INVERSE
PICK EQU $CE44 ;PICK CHAR OFF SCREEN
* INPUT SUBS
RDKEY EQU $FD0C
RDCHAR EQU $FD35
KEYIN EQU $FD1B
BASICIN EQU $C305
GETLN EQU $FD6A
GETLN1 EQU $FD6F ;GETLN WITH NO PROMPT
NOESC EQU $C9B7 ;HANDLES KEY OTHER THAN ESC
BINPUT EQU $C8F6
ESCAPING EQU $C918
IN EQU $200 ;256-CHAR INPUT BUFFER
RD80VID EQU $C01F
ESC EQU $9B ;ESC WITH HIGH BIT SET
RTARROW EQU $95 ;RIGHT ARROW WITH HIGH BIT SET
DELETE EQU $FF ;DELETE WITH HIGH BIT SET
BKSPACE EQU $88 ;BACKSPACE WITH HIGH BIT SET
HEXDEC EQU $ED24 ;HEX-TO-DECIMAL CONVERSION
CROUT EQU $FD8E ;PRINT A CARRIAGE RETURN
STROUT EQU $DB3A ;PRINT NULL-TERM STRING IN AY
* MONITOR SUBS
PRINTXY EQU $F940 ;PRINT X & Y AS HEX
PRBYTE EQU $FDDA ;PRINT BYTE AS 2 HEX DIGITS
SET80COL EQU $C001 ;ENABLE AUXILIARY MEM SWITCHING
PAGE2OFF EQU $C054 ;TURN ON MAIN MEMORY
PAGE2ON EQU $C055 ;TURN ON AUXILIARY MEMORY
DEBUG EQU 1
DEBUG2 EQU 0
********************************
* PUSHY MACRO *
********************************
PUSHY mac
tya
pha
<<<
********************************
* POPY MACRO *
********************************
POPY mac
pla
tay
<<<
********************************
* PUSHXY MACRO *
********************************
PUSHXY mac
txa
pha
tya
pha
<<<
********************************
* POPYX MACRO *
********************************
POPYX mac
pla
tay
pla
tax
<<<
********************************
* *
* PUTS MACRO *
* *
* APPLESOFT MUST BE IN MEMORY *
* BECAUSE THE STROUT SUB IS *
* USED. *
* *
* X & Y ARE PRESERVED *
* *
* ]1 - ADDRESS OF STRING *
* *
********************************
PUTS MAC
PUSHY
LDA #<]1 ;PUT LOW BYTE INTO A
LDY #>]1 ;PUT HIGH BYTE INTO Y
JSR STROUT ;CALL APPLESOFT'S STRING PRINT
POPY
<<<
PRINTHEX MAC
PHA
PUSHXY
lda ]1
JSR PRBYTE
POPYX
PLA
<<<
********************************
* *
* INSTALL VECTOR TO HANDLER *
* *
********************************
MAIN LDA #<DELHNDLR
STA KSWL
LDA #>DELHNDLR
STA KSWH
PUTS LOADMSG
RTS
********************************
* *
* KEYBOARD INPUT ROUTINE *
* *
* 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 *
* *
********************************
DELHNDLR STA ORIGCURS ;STORE THE ORIGINAL CURSOR CHAR
STY CURSPOS
PUSHXY
LDA ORIGCURS ;FOLLOWING CODE NEEDS THIS
BIT RDALTCHAR ;TEST FOR 80-COL ON
BMI COL80
***********************************************************************
COL40 JSR GETKEY40 ;LOAD "KEY" VARIABLE
JSR DEL2BS ;CONVERT DELETE TO BACKSPACE
STA KEY ;STORE IT BECAUSE A WILL GET WIPED
JMP FINISH
***********************************************************************
***********************************************************************
COL80
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 DEL2BS
STA KEY ;REMEMBER WHAT KEY WAS TYPED
CMP #ESC ;IS IT ESC?
BNE NOT_ESC ;IGNORE ESC
LDA #" " ;PREP FOR PUTCHAR80
LDY OURCH ;PREP FOR PUTCHAR80
JSR PUTCHAR80 ;ERASE CURSOR SO ESCAPEING WORKS PROPERLY
JSR ESCAPING ;not a subroutine!!!!!!!!!
JMP FINISH
NOT_ESC CMP #RTARROW ;IS IT A RIGHT ARROW
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 POPYX ;RESTORE X AND Y
LDA KEY ;LOAD RETURN VALUE
RTS
********************************
* *
* GETKEY40 SUBROUTINE *
* ORIGINAL CURSOR MUST BE IN A *
* KEY TYPED IS PUT INTO A *
* *
********************************
GETKEY40 BIT KBD ;TEST FOR KEY PRESSED
BPL GETKEY40 ;WAIT FOR KEY PRESSED
STA (BASL),Y ;CLEAR CURSOR
LDA KBD ;GET THE KEY THAT WAS PRESSED
BIT KBDSTRB ;CLEAR KEYBOARD STROBE
RTS
********************************
* *
* DEL2BS SUBROUTINE *
* *
* PRECONDITIONS: *
* 1. KEY IS IN ACCUMULATOR *
* *
* POSTCONDITIONS: *
* 1. KEY IS IN ACCUMULATOR *
* *
********************************
DEL2BS CMP #DELETE ;IS THE KEY IN A THE DELETE KEY
BNE D2BDONE
LDA #BKSPACE
D2BDONE RTS
********************************
* *
* 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
********************************
* *
* DATA *
* *
********************************
LOADMSG ASC "LOADED DELETE KEY TO BACKSPACE CONVERTER",0D,00
KEY DB 0
ORIGCURS DB 0
CURSPOS DB 0
CURSOR80 DB 0