mirror of
https://github.com/gungwald/delhndlr.git
synced 2024-06-01 18:41:27 +00:00
Some fixes
This commit is contained in:
parent
0c3e688faf
commit
5f122aba42
|
@ -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
|
|
||||||
|
|
||||||
********************************
|
********************************
|
||||||
* *
|
* *
|
||||||
|
|
Loading…
Reference in New Issue
Block a user