Separate into 40-col and 80-col
This commit is contained in:
parent
297fab0ef2
commit
c19eceec31
|
@ -1,4 +1,5 @@
|
||||||
*.swp
|
*.swp
|
||||||
del2bs
|
del2bs40
|
||||||
|
del2bs80
|
||||||
del2bs.dsk
|
del2bs.dsk
|
||||||
_FileInformation.txt
|
_FileInformation.txt
|
||||||
|
|
28
Makefile
28
Makefile
|
@ -1,25 +1,35 @@
|
||||||
# Compiles with https://www.brutaldeluxe.fr/products/crossdevtools/merlin/
|
# Compiles with https://www.brutaldeluxe.fr/products/crossdevtools/merlin/
|
||||||
# a.k.a. https://github.com/apple2accumulator/merlin32
|
# a.k.a. https://github.com/apple2accumulator/merlin32
|
||||||
#
|
|
||||||
|
|
||||||
AC=java -jar AppleCommander-1.3.5-ac.jar
|
AC=java -jar AppleCommander-1.3.5-ac.jar
|
||||||
PGM=del2bs
|
PGM=del2bs40
|
||||||
|
PGM2=del2bs80
|
||||||
SRC=$(PGM).s
|
SRC=$(PGM).s
|
||||||
VOL=$(PGM)
|
SRC2=$(PGM2).s
|
||||||
DSK=$(PGM).dsk
|
VOL=del2bs
|
||||||
|
DSK=$(VOL).dsk
|
||||||
|
ADDR=0x0300
|
||||||
|
|
||||||
$(DSK): $(PGM) $(PGM2)
|
$(DSK): $(PGM) $(PGM2)
|
||||||
#$(AC) -pro140 $(DSK) $(VOL) ---- Broken in 1.3.5 and others
|
@#$(AC) -pro140 $(DSK) $(VOL) ---- Broken in 1.3.5 and others
|
||||||
cp prodos.dsk $(DSK)
|
cp prodos.dsk $(DSK)
|
||||||
$(AC) -p $(DSK) $(PGM) BIN 0x0803 < $(PGM)
|
$(AC) -p $(DSK) $(PGM) BIN $(ADDR) < $(PGM)
|
||||||
|
$(AC) -p $(DSK) $(PGM2) BIN $(ADDR) < $(PGM2)
|
||||||
|
|
||||||
$(PGM): $(SRC)
|
$(PGM): $(SRC)
|
||||||
merlin32 $(SRC)
|
merlin32 . $(SRC)
|
||||||
@# Merlin fails to provide a non-0 exit code on failure so
|
@# Merlin fails to provide a non-0 exit code on failure so
|
||||||
@# it needs to be simulated by checking for the error_output.txt
|
@# it needs to be simulated by checking for the error_output.txt
|
||||||
@# file.
|
@# file.
|
||||||
@test -e $(PGM)
|
test -e $(PGM)
|
||||||
|
|
||||||
|
$(PGM2): $(SRC2)
|
||||||
|
merlin32 . $(SRC2)
|
||||||
|
@# Merlin fails to provide a non-0 exit code on failure so
|
||||||
|
@# it needs to be simulated by checking for the error_output.txt
|
||||||
|
@# file.
|
||||||
|
test -e $(PGM2)
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
$(RM) $(PGM) $(DSK) error_output.txt _FileInformation.txt
|
$(RM) $(PGM) $(PGM2) $(DSK) error_output.txt _FileInformation.txt
|
||||||
|
|
||||||
|
|
293
del2bs.s
293
del2bs.s
|
@ -1,293 +0,0 @@
|
||||||
********************************
|
|
||||||
* *
|
|
||||||
* 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 $803
|
|
||||||
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 $C91B
|
|
||||||
IN EQU $200 ;256-CHAR INPUT BUFFER
|
|
||||||
RD80VID EQU $C01F
|
|
||||||
|
|
||||||
* USED IN HANDLE_ESC
|
|
||||||
ESC_ON EQU $CEB1
|
|
||||||
ESC_OFF EQU $CEC4
|
|
||||||
UPSHFT EQU $CE14
|
|
||||||
CTLCHAR EQU $CAD6
|
|
||||||
X_NAK EQU $CD4D
|
|
||||||
A2C_CHAR EQU $067B
|
|
||||||
|
|
||||||
* DATA USED IN HANDLE_ESC
|
|
||||||
ESCTAB EQU $C97C
|
|
||||||
ESCCHAR EQU $C96B
|
|
||||||
DOS33_MODE EQU $04FB
|
|
||||||
|
|
||||||
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
|
|
||||||
<<<
|
|
||||||
|
|
||||||
********************************
|
|
||||||
* *
|
|
||||||
* INSTALL VECTOR TO DEL2BS *
|
|
||||||
* *
|
|
||||||
********************************
|
|
||||||
MAIN LDA #<DEL2BS
|
|
||||||
STA KSWL
|
|
||||||
LDA #>DEL2BS
|
|
||||||
STA KSWH
|
|
||||||
PUTS LOADMSG
|
|
||||||
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 *
|
|
||||||
* *
|
|
||||||
********************************
|
|
||||||
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
|
|
||||||
|
|
||||||
********************************
|
|
||||||
* *
|
|
||||||
* 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
|
|
||||||
|
|
||||||
********************************
|
|
||||||
* *
|
|
||||||
* 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,"AT ADDRESS $803",0D,00
|
|
||||||
KEY DB 0
|
|
||||||
ORIGCURS DB 0
|
|
||||||
CURSPOS DB 0
|
|
||||||
CURSOR80 DB 0
|
|
|
@ -0,0 +1,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
|
|
@ -0,0 +1,133 @@
|
||||||
|
********************************
|
||||||
|
* *
|
||||||
|
* 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
|
|
@ -0,0 +1,67 @@
|
||||||
|
********************************
|
||||||
|
* *
|
||||||
|
* APPLE II MACROS *
|
||||||
|
* *
|
||||||
|
* AUTHOR: BILL CHATFIELD *
|
||||||
|
* LICENSE: GPL *
|
||||||
|
* *
|
||||||
|
********************************
|
||||||
|
|
||||||
|
********************************
|
||||||
|
* 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
|
||||||
|
<<<
|
||||||
|
|
||||||
|
********************************
|
||||||
|
* PUSHAXY MACRO *
|
||||||
|
********************************
|
||||||
|
PUSHAXY MAC
|
||||||
|
PHA
|
||||||
|
TXA
|
||||||
|
PHA
|
||||||
|
TYA
|
||||||
|
PHA
|
||||||
|
<<<
|
||||||
|
|
||||||
|
********************************
|
||||||
|
* POPYXA MACRO *
|
||||||
|
********************************
|
||||||
|
POPYXA MAC
|
||||||
|
PLA
|
||||||
|
TAY
|
||||||
|
PLA
|
||||||
|
TAX
|
||||||
|
PLA
|
||||||
|
<<<
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
********************************
|
||||||
|
* *
|
||||||
|
* APPLE II MACROS *
|
||||||
|
* *
|
||||||
|
* AUTHOR: BILL CHATFIELD *
|
||||||
|
* LICENSE: GPL *
|
||||||
|
* *
|
||||||
|
********************************
|
||||||
|
|
||||||
|
********************************
|
||||||
|
* *
|
||||||
|
* WRSTR MACRO *
|
||||||
|
* *
|
||||||
|
* WRITES AN ASCII 0 TERMINATED *
|
||||||
|
* STRING TO THE *
|
||||||
|
* CURRENT OUTPUT DEVICE. *
|
||||||
|
* THE STROUT SUBROUTINE IS *
|
||||||
|
* USED, THE ADDRESS OF WHICH *
|
||||||
|
* IS $DB3A. THAT IS IN THE *
|
||||||
|
* APPLESOFT ROM LANGUAGE CARD, *
|
||||||
|
* WHICH CONSISTS OF THE *
|
||||||
|
* FOLLOWING PROGRAMS: *
|
||||||
|
* *
|
||||||
|
* $D000-$F7FF APPLESOFT *
|
||||||
|
* $F800-$FFFF SYSTEM MONITOR *
|
||||||
|
* *
|
||||||
|
* INPUTS: *
|
||||||
|
* ]1 - STRING TO WRITE *
|
||||||
|
* *
|
||||||
|
* OUTPUTS: *
|
||||||
|
* NONE *
|
||||||
|
* *
|
||||||
|
* REGISTERS: *
|
||||||
|
* A - PRESERVED *
|
||||||
|
* X - PRESERVED *
|
||||||
|
* Y - PRESERVED *
|
||||||
|
* *
|
||||||
|
********************************
|
||||||
|
WRSTR MAC
|
||||||
|
PUSHAXY
|
||||||
|
LDA #<]1 ;PUT LOW BYTE INTO A
|
||||||
|
LDY #>]1 ;PUT HIGH BYTE INTO Y
|
||||||
|
JSR STROUT ;CALL APPLESOFT'S STRING PRINT
|
||||||
|
POPYXA
|
||||||
|
<<<
|
|
@ -0,0 +1,76 @@
|
||||||
|
********************************
|
||||||
|
* *
|
||||||
|
* APPLE II SYMBOLS FOR MEMORY *
|
||||||
|
* LOCATIONS *
|
||||||
|
* *
|
||||||
|
* AUTHOR: BILL CHATFIELD *
|
||||||
|
* LICENSE: GPL *
|
||||||
|
* *
|
||||||
|
********************************
|
||||||
|
|
||||||
|
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 $C91B
|
||||||
|
IN EQU $200 ;256-CHAR INPUT BUFFER
|
||||||
|
RD80VID EQU $C01F
|
||||||
|
|
||||||
|
* USED IN HANDLE_ESC
|
||||||
|
ESC_ON EQU $CEB1
|
||||||
|
ESC_OFF EQU $CEC4
|
||||||
|
UPSHFT EQU $CE14
|
||||||
|
CTLCHAR EQU $CAD6
|
||||||
|
X_NAK EQU $CD4D
|
||||||
|
A2C_CHAR EQU $067B
|
||||||
|
|
||||||
|
* DATA USED IN HANDLE_ESC
|
||||||
|
ESCTAB EQU $C97C
|
||||||
|
ESCCHAR EQU $C96B
|
||||||
|
DOS33_MODE EQU $04FB
|
||||||
|
|
||||||
|
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
|
Loading…
Reference in New Issue