diff --git a/.gitignore b/.gitignore index b61be15..d3a61c4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ *.swp -del2bs +del2bs40 +del2bs80 del2bs.dsk _FileInformation.txt diff --git a/Makefile b/Makefile index 80de880..ddeea06 100644 --- a/Makefile +++ b/Makefile @@ -1,25 +1,35 @@ # Compiles with https://www.brutaldeluxe.fr/products/crossdevtools/merlin/ # a.k.a. https://github.com/apple2accumulator/merlin32 -# AC=java -jar AppleCommander-1.3.5-ac.jar -PGM=del2bs +PGM=del2bs40 +PGM2=del2bs80 SRC=$(PGM).s -VOL=$(PGM) -DSK=$(PGM).dsk +SRC2=$(PGM2).s +VOL=del2bs +DSK=$(VOL).dsk +ADDR=0x0300 $(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) - $(AC) -p $(DSK) $(PGM) BIN 0x0803 < $(PGM) + $(AC) -p $(DSK) $(PGM) BIN $(ADDR) < $(PGM) + $(AC) -p $(DSK) $(PGM2) BIN $(ADDR) < $(PGM2) $(PGM): $(SRC) - merlin32 $(SRC) + merlin32 . $(SRC) @# 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 $(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: - $(RM) $(PGM) $(DSK) error_output.txt _FileInformation.txt + $(RM) $(PGM) $(PGM2) $(DSK) error_output.txt _FileInformation.txt diff --git a/del2bs.s b/del2bs.s deleted file mode 100644 index c6fb609..0000000 --- a/del2bs.s +++ /dev/null @@ -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 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 diff --git a/del2bs40.s b/del2bs40.s new file mode 100644 index 0000000..468f933 --- /dev/null +++ b/del2bs40.s @@ -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 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 diff --git a/del2bs80.s b/del2bs80.s new file mode 100644 index 0000000..9ad3d11 --- /dev/null +++ b/del2bs80.s @@ -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 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 diff --git a/register.macs.s b/register.macs.s new file mode 100644 index 0000000..9e507ac --- /dev/null +++ b/register.macs.s @@ -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 + <<< + \ No newline at end of file diff --git a/string.macs.s b/string.macs.s new file mode 100644 index 0000000..14fda2d --- /dev/null +++ b/string.macs.s @@ -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 + <<< diff --git a/symbols.s b/symbols.s new file mode 100644 index 0000000..45164bb --- /dev/null +++ b/symbols.s @@ -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