Some fixes

This commit is contained in:
Bill Chatfield 2021-11-28 23:57:08 -05:00
parent 0c3e688faf
commit 5f122aba42

View File

@ -7,6 +7,18 @@
* * * *
******************************** ********************************
*********************************************************
* 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 ORG $300
TYP $06 ;BINARY TYPE TYP $06 ;BINARY TYPE
DSK delkey.clr.left ;OUTPUT FILE NAME DSK delkey.clr.left ;OUTPUT FILE NAME
@ -19,16 +31,17 @@ KSWH EQU $39 ;KEYBOARD SWITCH HIGH BYTE
OURCH EQU $57B ;HORIZONTAL POSITION (80-COL) OURCH EQU $57B ;HORIZONTAL POSITION (80-COL)
OURCV EQU $5FB ;VERTICAL POSITION (80-COL) OURCV EQU $5FB ;VERTICAL POSITION (80-COL)
KBD EQU $C000 ;KEYBOARD DATA + STROBE KBD EQU $C000 ;KEYBOARD DATA + STROBE
KBDSTRB EQU $C010 ;CLEAR KEYBOARD STROBE
CXROMON EQU $C007 ;TURN ON INTERNAL ROM
CXROMOFF EQU $C006 ;ENABLE SLOT ROMS CXROMOFF EQU $C006 ;ENABLE SLOT ROMS
CXROMON EQU $C007 ;TURN ON INTERNAL ROM
80COLOFF EQU $C00C ;Off: display 40 columns 80COLOFF EQU $C00C ;Off: display 40 columns
80COLON EQU $C00D ;On: display 80 columns 80COLON EQU $C00D ;On: display 80 columns
RD80COL EQU $C01F ;Read 80col switch (1 = on) KBDSTRB EQU $C010 ;CLEAR KEYBOARD STROBE
ALTCHAR EQU $C01E ;Alt char set (1 = on)
COUT EQU $FDED ;WRITE A CHARACTER COUT EQU $FDED ;WRITE A CHARACTER
* 80-COL SUBS INSIDE THE INTERNAL ROM * 80-COL SUBS INSIDE THE INTERNAL ROM
INVERT EQU $CEDD ;INVERT CHAR ON SCREEN GETKEY EQU $CB15 ;THIS DOES NOT SEEM TO EXIST
INVERT EQU $CEDD ;INVERT CHAR ON SCREEN - DOES NOT WORK
PICK EQU $CF01 ;PICK CHAR OFF SCREEN PICK EQU $CF01 ;PICK CHAR OFF SCREEN
* INPUT SUBS * INPUT SUBS
@ -41,6 +54,7 @@ NOESC EQU $C9B7 ;HANDLES KEY OTHER THAN ESC
BINPUT EQU $C8F6 BINPUT EQU $C8F6
ESCAPING EQU $C918 ESCAPING EQU $C918
IN EQU $200 ;256-CHAR INPUT BUFFER IN EQU $200 ;256-CHAR INPUT BUFFER
RD80VID EQU $C01F
ESC EQU $9B ;ESC WITH HIGH BIT SET ESC EQU $9B ;ESC WITH HIGH BIT SET
RTARROW EQU $95 ;RIGHT ARROW WITH HIGH BIT SET RTARROW EQU $95 ;RIGHT ARROW WITH HIGH BIT SET
@ -54,13 +68,50 @@ STROUT EQU $DB3A ;PRINT NULL-TERM STRING IN AY
PRINTXY EQU $F940 ;PRINT X & Y AS HEX PRINTXY EQU $F940 ;PRINT X & Y AS HEX
PRBYTE EQU $FDDA ;PRINT BYTE AS 2 HEX DIGITS PRBYTE EQU $FDDA ;PRINT BYTE AS 2 HEX DIGITS
STOR80ON EQU $C001 ;ENABLE AUXILIARY MEM SWITCHING SET80COL EQU $C001 ;ENABLE AUXILIARY MEM SWITCHING
PAGE2OFF EQU $C054 ;TURN ON MAIN MEMORY PAGE2OFF EQU $C054 ;TURN ON MAIN MEMORY
PAGE2ON EQU $C055 ;TURN ON AUXILIARY MEMORY PAGE2ON EQU $C055 ;TURN ON AUXILIARY MEMORY
DEBUG EQU 1 DEBUG EQU 1
DEBUG2 EQU 0 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 * * PUTS MACRO *
@ -75,15 +126,13 @@ DEBUG2 EQU 0
* * * *
******************************** ********************************
PUTS MAC PUTS MAC
TYA ;PRESERVE Y PUSHY
PHA LDA #<]1 ;PUT LOW BYTE INTO A
LDA #<]1 ;PUT LOW BYTE INTO A LDY #>]1 ;PUT HIGH BYTE INTO Y
LDY #>]1 ;PUT HIGH BYTE INTO Y JSR STROUT ;CALL APPLESOFT'S STRING PRINT
JSR STROUT ;CALL APPLESOFT'S STRING PRINT POPY
PLA ;RESTORE Y <<<
TAY
<<<
******************************** ********************************
* * * *
@ -100,8 +149,7 @@ PUTS MAC
******************************** ********************************
PUTC80 MAC PUTC80 MAC
TYA ;MOVE Y TO A PUSHY
PHA ;SAVE Y VALUE ON STACK
SEI ;DISABLE INTERRUPTS SEI ;DISABLE INTERRUPTS
STA STOR80ON ;ENABLE MAIN/AUX MEM SWITCHING STA STOR80ON ;ENABLE MAIN/AUX MEM SWITCHING
LDA ]2 ;LOAD 80-COL HORIZ CURSOR POSITN LDA ]2 ;LOAD 80-COL HORIZ CURSOR POSITN
@ -115,8 +163,16 @@ CONTINUE TAY ;MOVE CURSOR POSITION TO Y
STA (BASL),Y ;DISPLAY THE CHARACTER STA (BASL),Y ;DISPLAY THE CHARACTER
STA PAGE2OFF ;TURN MAIN MEM BACK ON STA PAGE2OFF ;TURN MAIN MEM BACK ON
CLI ;ENABLE INTERRUPTS CLI ;ENABLE INTERRUPTS
PLA ;PULL Y VALUE FROM STACK POPY
TAY ;RESTORE Y VALUE <<<
PRINTHEX MAC
PHA
PUSHXY
lda ]1
JSR PRBYTE
POPYX
PLA
<<< <<<
******************************** ********************************
@ -125,8 +181,7 @@ CONTINUE TAY ;MOVE CURSOR POSITION TO Y
* * * *
******************************** ********************************
MAIN MAIN LDA #<DELHNDLR
LDA #<DELHNDLR
STA KSWL STA KSWL
LDA #>DELHNDLR LDA #>DELHNDLR
STA KSWH STA KSWH
@ -148,76 +203,88 @@ MAIN
* * * *
******************************** ********************************
DELHNDLR DELHNDLR STA ORIGCURS ;STORE THE ORIGINAL CURSOR CHAR
STA ORIGCURS ;STORE THE ORIGINAL CURSOR CHAR PUSHXY
TXA ;SAVE X
PHA
TYA ;SAVE Y
PHA
BIT RD80COL ;TEST FOR 80-COL ON LDA ORIGCURS ;FOLLOWING CODE NEEDS THIS
BIT ALTCHAR ;TEST FOR 80-COL ON
BMI COL80 BMI COL80
COL40 ***********************************************************************
JSR GETKEY ;LOAD "KEY" VARIABLE COL40 JSR GETKEY40 ;LOAD "KEY" VARIABLE
JSR DEL2BS ;CONVERT DELETE TO BACKSPACE JSR DEL2BS ;CONVERT DELETE TO BACKSPACE
LDA ORIGCURS STA KEY ;STORE IT BECAUSE A WILL GET WIPED
STA (BASL),Y ;REMOVE CURSOR
JMP FINISH JMP FINISH
***********************************************************************
COL80 ***********************************************************************
PUTC80 #' ';OURCH ;DISPLAY OUR CURSOR, INVERSE SPC COL80
STA (BASL),Y
NEXTKEY PUTC80 #' ';OURCH
JSR GETKEY ;LOAD "KEY" VARIABLE NEXTKEY JSR GETKEY80 ;GET KEYBOARD KEY IN ACCUMULATOR
JSR DEL2BS ;CONVERT DELETE TO BACKSPACE
CMP #ESC ;IS IT ESC? CMP #ESC ;IS IT ESC?
BEQ NEXTKEY ;IGNORE ESC BNE NOT_ESC ;IGNORE ESC
CMP #RTARROW ;IS IT A RIGHT ARROW JSR ESCAPING ;HANDLE ESCAPE SEQUENCES
BNE CLRCURS ;NOT RIGHT ARROW THEN DONE JMP NEXTKEY
LDY OURCH ;GET HORIZONTAL CURSOR POSITION 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 JSR PICK ;GRAB CHAR FROM SCREEN
ORA #$80 ;SET HIGH BIT ORA #$80 ;SET HIGH BIT
STA KEY NOTRTARROW JSR DEL2BS ;CONVERT DELETE TO BACKSPACE
STA KEY ;IT WILL GET WIPED
PUTC80 #" ";OURCH
***********************************************************************
CLRCURS FINISH POPYX ;RESTORE X AND Y
PUTC80 #" ";OURCH ;ERASE CURSOR
FINISH
PLA ;RESTORE Y
TAY
PLA ;RESTORE X
TAX
LDA KEY ;LOAD RETURN VALUE LDA KEY ;LOAD RETURN VALUE
RTS RTS
******************************** ********************************
* * * *
* GETKEY SUBROUTINE * * GETKEY40 SUBROUTINE *
* ORIGINAL CURSOR MUST BE IN A *
* KEY TYPED IS PUT INTO A *
* * * *
******************************** ********************************
GETKEY GETKEY40 BIT KBD ;TEST FOR KEY PRESSED
BIT KBD ;TEST FOR KEY PRESSED BPL GETKEY40 ;WAIT FOR KEY PRESSED
BPL GETKEY ;WAIT FOR KEY PRESSED STA (BASL),Y ;CLEAR CURSOR
LDA KBD ;GET THE KEY THAT WAS PRESSED
BIT KBDSTRB ;CLEAR KEYBOARD STROBE
RTS
********************************
* *
* GETKEY80 SUBROUTINE *
* ORIGINAL CURSOR MUST BE IN A *
* KEY TYPED IS PUT INTO A *
* *
********************************
GETKEY80 BIT KBD ;TEST FOR KEY PRESSED
BPL GETKEY80 ;WAIT FOR KEY PRESSED
LDA KBD ;GET THE KEY THAT WAS PRESSED LDA KBD ;GET THE KEY THAT WAS PRESSED
BIT KBDSTRB ;CLEAR KEYBOARD STROBE BIT KBDSTRB ;CLEAR KEYBOARD STROBE
STA KEY ;STORE THE KEY THAT WAS READ
RTS RTS
******************************** ********************************
* * * *
* DEL2BS SUBROUTINE * * DEL2BS SUBROUTINE *
* * * *
* PRECONDITIONS: *
* 1. KEY IS IN ACCUMULATOR *
* *
* POSTCONDITIONS: *
* 1. KEY IS IN ACCUMULATOR *
* *
******************************** ********************************
DEL2BS 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
STA KEY D2BDONE RTS
D2BDONE
RTS
******************************** ********************************
* * * *