mirror of
https://github.com/A2osX/A2osX.git
synced 2024-06-10 06:29:33 +00:00
FSE source code
This commit is contained in:
parent
9190fc0a94
commit
ac15ee428e
220
FSE/FSE.S.1.txt
Normal file
220
FSE/FSE.S.1.txt
Normal file
|
@ -0,0 +1,220 @@
|
|||
NEW
|
||||
AUTO 3,1
|
||||
*--------------------------------
|
||||
* BEWARE ZP USE!!!
|
||||
*--------------------------------
|
||||
CH .EQ $24 MONITOR HORIZ POSN
|
||||
CV .EQ $25 MONITOR VERT POSN
|
||||
BASEL .EQ $28 MONITOR BASE ADRS
|
||||
A2L .EQ $3E
|
||||
A2H .EQ $3F
|
||||
A4L .EQ $42
|
||||
A4H .EQ $43
|
||||
*--------------------------------
|
||||
SP.BEG .EQ $52,53 Changed! PROG CODE STACK BEGIN
|
||||
SP.END .EQ $54,55 PROG CODE STACK END+1
|
||||
PP.BEG .EQ $56,57 PROG CODE BEGIN
|
||||
PP.END .EQ $58,59 Changed! PROG CODE END+1
|
||||
*--------------------------------
|
||||
.DUMMY
|
||||
.OR $C0
|
||||
LEFT.MARGIN .BS 1 INIT TO 6
|
||||
RIGHT.MARGIN .BS 1 INIT TO SCR.SIZE-1
|
||||
RM.ADJUST .BS 1 INIT TO 6
|
||||
POSH .BS 1 INIT TO 6
|
||||
POSV .BS 1 INIT TO 0
|
||||
ED.PTR .BS 1 EDIT LINE CHAR PTR
|
||||
ED.KEY .BS 1 FIND CHAR KEY CODE
|
||||
CTR .BS 1 GENERAL CTR FOR SCROLL ROUTINES
|
||||
MAXV .BS 1 MAX POSV OF SCREEN SCROLL
|
||||
LN.FLAG .BS 1 INIT TO 0
|
||||
FILL.TO .BS 1 COLUMN TO BLANK FILL TO
|
||||
FIRST.LINE .BS 1 FIRST LINE OF SCRN (INIT 0)
|
||||
LAST.LINE .BS 1 LAST LINE OF SCRN (INIT 23)
|
||||
BLKSIZ .BS 1
|
||||
RPTCNT .BS 1
|
||||
RPTCHR .BS 1
|
||||
PTR1 .BS 2
|
||||
PTR2 .BS 2
|
||||
CUR.KEY .BS 1 CURRENT KEY
|
||||
LNO .BS 2 LINE NUMBER FOR PRNT ROUTINE
|
||||
SAV.CTR .BS 1 CTR FOR EDIT LINE
|
||||
SAV.PTR1 .BS 2 PTR1 FOR EDIT LINE
|
||||
SAV.LNO .BS 2 LNO FOR EDIT LINE
|
||||
CV.DIGFLG .BS 1 FIRST NON-ZERO DIGIT FLG
|
||||
NO.SHOW.FLAG .BS 1 SET TO PREVENT SHOW SCRN
|
||||
SRCP .BS 2
|
||||
.ED
|
||||
*--------------------------------
|
||||
WBUF .EQ $200
|
||||
M.RESET .EQ $3F2 THRU 3F4
|
||||
*--------------------------------
|
||||
M.BASCALC .EQ $FBC1 CALC BASE ADRS
|
||||
M.BELL .EQ $FBDD RING BELL
|
||||
M.COUT .EQ $FDED APPLE CHAR OUTPUT
|
||||
*--------------------------------
|
||||
HARD JMP HINIT INIT SCREEN EDITOR
|
||||
*--------------------------------
|
||||
START.COL .EQ 6 START OF LINE DATA IN BUFFER
|
||||
*--------------------------------
|
||||
*
|
||||
* STANDARD PARAMETER AREA
|
||||
*
|
||||
* THESE PARAMETERS ALLOW CUSTOMIZATION
|
||||
* OF THE SCREEN EDITOR TO SUIT INDIVIDUAL TASTE.
|
||||
*--------------------------------
|
||||
SCREEN.WIDTH .DA #SCR.SIZE WIDTH OF SCREEN
|
||||
ROLL.VALUE .DA #24 (20 4 WM) SCREEN ROLL UP/DOWN VALUE
|
||||
ROLL.VALUE2 .DA #100 BIG ROLL UP/DOWN VALUE
|
||||
HORT.PAGE .DA #40 HORIZONTAL PAGE
|
||||
RPT.CHAR .DA #'-' REPEAT CHAR FOR COMMENT LINE
|
||||
RPT.LENG .DA #32 REPEAT LENGTH FOR COMMENT LINE
|
||||
SKMOD.FLG .DA #$00 ($FF 4 WM) SHIFT KEY MOD FLAG
|
||||
AUTO.REN .DA #$FF AUTO RENUMBER FLAG
|
||||
AUTO.BASE .DA 1000 AUTO REN START LINE NUM
|
||||
AUTO.INC .DA 10 AUTO REN INCREMENT LINE NUM
|
||||
RT.FENCEL .DA #248-SCR.SIZE+START.COL RIGHTMOST HORTZ PAGE LIMIT
|
||||
RT.FENCER .DA #248+START.COL-1 RIGHTMOST COLUMN ALLOWED
|
||||
L.MARGIN .DA #START.COL LEFT MARGIN FOR CAR RETN POSN
|
||||
* TAB TABLE 21 ENTRIES ZERO ON UNUSED ENTRIES
|
||||
TAB.TBL .DA #1,#8,#12,#21,#26,#35,#50,#0,#0,#0 ENTRIES 1-10
|
||||
.DA #0,#0,#0,#0,#0,#0,#0,#0,#0,#0 ENTRIES 11-20
|
||||
.DA #0 END OF TABLE
|
||||
SZ.TAB.TBL .EQ *-TAB.TBL
|
||||
*--------------------------------
|
||||
* VARIABLE AREA BELOW $3D0
|
||||
*
|
||||
* NOTE THAT WE SUBTRACT THE NEEDED SPACE
|
||||
* FROM THE PREVIOUS DEFINED SYMBOL. I.E.
|
||||
* 'LN.CNT' IS 32 BYTES BEFORE $3D0.
|
||||
*--------------------------------
|
||||
VAR.END .EQ $3D0
|
||||
LN.CNT .EQ VAR.END-32 BACKWARD SCROLL LENGTH TABLE
|
||||
INDEX .EQ LN.CNT-1 INDEX TO LN.CNT
|
||||
COMPOSE.FLG .EQ INDEX-1 INIT TO 0
|
||||
SPECIAL.FLG .EQ COMPOSE.FLG-1 INIT TO 0
|
||||
MDIST .EQ SPECIAL.FLG-2 MOVE DISTANCE
|
||||
ESC.FLAG .EQ MDIST-1 EDIT/SCROLL MODE FLG
|
||||
ONCE.FLG .EQ ESC.FLAG-1 SPECIAL ESCAPE FLAG
|
||||
CHANGE.FLG .EQ ONCE.FLG-1 EDIT LINE CHANGED / MUST SUBMIT
|
||||
FORM.FLG .EQ CHANGE.FLG-1 SHOW FORM GUIDE (INIT 0)
|
||||
ALPHA.FLG .EQ FORM.FLG-1 ALPHA SHIFT LOCK FLAG (INIT 0)
|
||||
SAVE.RSTV .EQ ALPHA.FLG-2 SAVE RESET VECTOR
|
||||
SAVE.3D1 .EQ SAVE.RSTV-2 SAVE OS SOFT VECTOR
|
||||
SAVE.3D4 .EQ SAVE.3D1-2 SAVE OS HARD VECTOR
|
||||
SAVE.36 .EQ SAVE.3D4-2 SAVE OUTPUT HOOK
|
||||
SAVE.38 .EQ SAVE.36-2 SAVE INPUT HOOK
|
||||
VAR.BEG .EQ save.38
|
||||
.DO VAR.BEG<$300
|
||||
*** ERROR VAR.BEG < $300
|
||||
.FIN
|
||||
*--------------------------------
|
||||
*
|
||||
* FUNCTION TABLE FOR SCROLL MODE
|
||||
* KEYBOARD FUNCTIONS.
|
||||
*
|
||||
* BECAUSE OF KEYBOARD VARIATIONS BETWEEN APPLE II PLUS
|
||||
* AND APPLE II E AND FRANKLIN KEYBOARDS SOME KEYS ARE
|
||||
* DEFINED AS DUPLICATE FUNCTIONS TO IMPROVE THE HUMAN
|
||||
* FACTORS OF KEY PLACEMENT.
|
||||
*
|
||||
* THE SHIFT 2 KEY ON AP2+ IS '"' BUT ON OTHER KEYBOARDS
|
||||
* AN '@' IS THE SHIFT 2 KEY CODE. '"' AND '@' PERFORM
|
||||
* THE SAME FUNCTION.
|
||||
*
|
||||
* THE HORIZONTAL SCROLL KEYS ':' AND '-' ON THE AP2+ KEYBOARD
|
||||
* ARE NOT IN EASY REACH ON OTHER KEYBOARDS SO THE KEYS
|
||||
* ',' AND '.' PERFORM THE SAME FUNCTION AND HAVE THE
|
||||
* NICE SUGGESTIVE PROMPT OF THEIR SHIFT CODES '<' AND '>'
|
||||
* TO POINT CORRECT SCROLL DIRECTION.
|
||||
*--------------------------------
|
||||
FTBL .DA #'1,ROLL.UP-1 ROLL UP 24 LINES
|
||||
.DA #'2,ROLL.DN-1 ROLL DOWN 24 LINES
|
||||
.DA #'3,LN.TOGL-1 LINE NUMBER TOGGLE
|
||||
.DA #'4,COMPOSE-1 COMPOSE MODE TOGGLE
|
||||
.DA #'5,FORM.GUIDE-1 FORM GUIDE MODE TOGGLE
|
||||
.DA #'W-$40,SET.LMARGIN-1 SET LEFT MARGIN
|
||||
.DA #'/,GOTO.LINE-1 GOTO LINE#
|
||||
.DA #'Q-$40,EXIT-1 QUIT FROM EDITOR
|
||||
.DA #'B,SHOW.BEGIN-1 BEGINNING OF FILE
|
||||
.DA #'E,SHOW.END-1 END OF FILE
|
||||
.DA #'!,ROLL.U100-1 ROLL UP 100 LINES
|
||||
.DA #'",ROLL.D100-1 AP2+ ROLL DOWN 100 LINES
|
||||
.DA #'@,ROLL.D100-1 AP2E ROLL DOWN 100 LINES
|
||||
.DA #':,LEFT.PAGE-1 AP2+ HORIZONTAL SCROLL LEFT
|
||||
.DA #',,LEFT.PAGE-1 AP2E HORIZONTAL SCROLL LEFT
|
||||
.DA #'-,RIGHT.PAGE-1 AP2+ HORIZONTAL SCROLL RIGHT
|
||||
.DA #'.,RIGHT.PAGE-1 AP2E HORIZONTAL SCROLL RIGHT
|
||||
.DA #'I,MOVE.UP-1 MOVE CRSR UP 1 LINE
|
||||
.DA #'K-$40,MOVE.UP-1 MOVE CRSR UP 1 LINE
|
||||
.DA #'M,MOVE.DN-1 MOVE CRSR DOWN 1 LINE
|
||||
.DA #'J-$40,MOVE.DN-1 MOVE CRSR DOWN 1 LINE
|
||||
.DA #'J,MOVE.LF-1 MOVE CRSR LEFT 1 CHAR
|
||||
.DA #'H-$40,MOVE.LF-1 MOVE CRSR LEFT 1 CHAR
|
||||
.DA #'K,MOVE.RT-1 MOVE CRSR RIGHT 1 CHAR
|
||||
.DA #'U-$40,MOVE.RT-1 MOVE CRSR RIGHT 1 CHAR
|
||||
.DA #'L-$40,INSERT-1 INSERT LINE
|
||||
.DA #'Z-$40,DELETE-1 DELETE LINE
|
||||
.DA #$1B,ESCAPE-1 ENTER EDIT MODE
|
||||
.DA #'M-$40,RETURN-1 RETURN TO NEXT LINE
|
||||
.DA #'P-$40,DINSERT-1 INSERT DASHED LINE COMMENT
|
||||
**** SPECIAL EDIT MODE FORCING KEYS
|
||||
**** THERE MUST BE NO CONFLICT WITH THE ABOVE
|
||||
**** SCROLL MODE FUNCTION KEY CODES.
|
||||
.DA #'@-$40,SPECIAL-1 CLEAR TO EOL
|
||||
.DA #'A-$40,SPECIAL-1 TOGGLE ALPHA SHIFT LOCK
|
||||
.DA #'B-$40,SPECIAL-1 BEGINING OF LINE
|
||||
.DA #'C-$40,SPECIAL-1 COPY TO TAB
|
||||
.DA #'D-$40,SPECIAL-1 DELETE CHAR
|
||||
.DA #'F-$40,SPECIAL-1 FIND CHAR
|
||||
.DA #'I-$40,SPECIAL-1 INSERT CHAR
|
||||
.DA #'N-$40,SPECIAL-1 END OF LINE
|
||||
.DA #'O-$40,SPECIAL-1 INSERT CNTRL CHAR
|
||||
.DA #'S-$40,SPECIAL-1 SET/CLEAR TAB
|
||||
.DA #'T-$40,SPECIAL-1 TAB
|
||||
FTBL.Z .EQ *-FTBL
|
||||
.DO FTBL.Z>256
|
||||
!!! SCROLL MODE FUNCTION TABLE TOO LARGE
|
||||
.FIN
|
||||
*--------------------------------
|
||||
*
|
||||
* FUNCTION TABLE FOR EDIT MODE
|
||||
* KEYBOARD FUNCTIONS.
|
||||
*
|
||||
*--------------------------------
|
||||
E.TBL
|
||||
.DA #'@-$40,E.ZAP-1 CLEAR TO EOL
|
||||
.DA #'A-$40,E.SHIFT-1 TOGGLE ALPHA SHIFT LOCK
|
||||
.DA #'B-$40,E.BEG-1 BEGINNING
|
||||
.DA #'C-$40,E.COPY-1 COPY TO TAB
|
||||
.DA #'D-$40,E.DEL-1 DELETE CHAR
|
||||
.DA #'F-$40,E.FIND-1 FIND CHAR
|
||||
.DA #'H-$40,E.BKSP-1 BACKSPACE
|
||||
.DA #'I-$40,E.INS-1 INSERT CHAR
|
||||
.DA #'N-$40,E.END-1 END OF LINE
|
||||
.DA #'O-$40,E.OVR-1 INSERT CONTROL CHAR
|
||||
.DA #'R-$40,E.RESTORE-1 RESTORE LINE
|
||||
.DA #'S-$40,E.SET.TAB-1 SET/CLEAR TAB
|
||||
.DA #'T-$40,E.TAB-1 TAB TO NEXT POSN
|
||||
.DA #'U-$40,E.RIT-1 RIGHT ARROW
|
||||
.DA #$1B,E.ESC-1 ESCAPE FROM EDIT MODE
|
||||
**** SCROLL MODE FUNCTIONS ****
|
||||
**** THESE KEY CODES MUST NOT CONFLICT
|
||||
**** WITH THE EDIT KEY CODES.
|
||||
.DA #'J-$40,E.CTRL-1 MOVE DOWN
|
||||
.DA #'K-$40,E.CTRL-1 MOVE UP
|
||||
.DA #'L-$40,E.CTRL-1 INSERT LINE
|
||||
.DA #'M-$40,E.CTRL-1 RETURN
|
||||
.DA #'P-$40,E.CTRL-1 INSERT COMMENT LINE
|
||||
.DA #'Q-$40,E.CTRL-1 QUIT
|
||||
.DA #'W-$40,E.CTRL-1 SET LEFT MARGIN
|
||||
.DA #'Z-$40,E.CTRL-1 DELETE LINE
|
||||
E.TBLSZ .EQ *-E.TBL
|
||||
.DO E.TBLSZ>256
|
||||
!!! EDIT MODE FUNCTION TABLE TOO LARGE
|
||||
.FIN
|
||||
*--------------------------------
|
||||
MAN
|
||||
SAVE usr/src/fse/fse.s.1
|
||||
LOAD usr/src/fse/fse.s
|
||||
ASM
|
522
FSE/FSE.S.2.txt
Normal file
522
FSE/FSE.S.2.txt
Normal file
|
@ -0,0 +1,522 @@
|
|||
NEW
|
||||
AUTO 3,1
|
||||
*--------------------------------
|
||||
HINIT LDA SP.BEG KILL SYMBOL TABLE
|
||||
STA SP.END EDIT USES IT FOR
|
||||
LDA SP.BEG+1 SCROLL LINE STACK
|
||||
STA SP.END+1
|
||||
LDY #VAR.BEG ZERO DATA AREA
|
||||
LDA #0
|
||||
.1 STA $300,Y
|
||||
INY
|
||||
CPY #VAR.END
|
||||
BCC .1
|
||||
LDA #START.COL START IN THIS COLUMN
|
||||
STA LEFT.MARGIN
|
||||
STA POSH CURSOR IN COLUMN 1
|
||||
CLC
|
||||
ADC SCREEN.WIDTH
|
||||
STA RIGHT.MARGIN
|
||||
LDA #23
|
||||
STA LAST.LINE OF SCROLL
|
||||
LDX #0
|
||||
STX NO.SHOW.FLAG
|
||||
STX RM.ADJUST NO LINE NUMBERS
|
||||
STX LN.FLAG
|
||||
STX FIRST.LINE OF SCROLL
|
||||
STX POSV CURSOR ON LINE 0
|
||||
INX X=1
|
||||
.2 LDA M.RESET,X SAVE RESET VECTOR
|
||||
STA SAVE.RSTV,X
|
||||
LDA $3D1,X SAVE 3D1.3D2
|
||||
STA SAVE.3D1,X
|
||||
LDA $3D4,X SAVE 3D4.3D5
|
||||
STA SAVE.3D4,X
|
||||
LDA $36,X SAVE 36.37
|
||||
STA SAVE.36,X
|
||||
LDA $38,X SAVE 38.39
|
||||
STA SAVE.38,X
|
||||
LDA MY.VECTOR,X
|
||||
STA M.RESET,X RESET TO ME
|
||||
STA $3D1,X 3D0G TO ME
|
||||
STA $3D4,X 3D3G TO ME
|
||||
DEX
|
||||
BPL .2
|
||||
TXS
|
||||
JSR FIXRST FIX POWER UP BYTE
|
||||
BCC DO.GOTO.LINE BA, BUT WATCH IT!!! $#*
|
||||
*--------------------------------
|
||||
GOTO.LINE LDX #1
|
||||
.1 STX LNO
|
||||
JSR READ.KEY.CODE
|
||||
LDX LNO
|
||||
STA WBUF,X
|
||||
INX
|
||||
CMP #'0'
|
||||
BCC DO.GOTO.LINE
|
||||
CMP #'9'+1
|
||||
BCC .1
|
||||
|
||||
DO.GOTO.LINE
|
||||
|
||||
LDA #0
|
||||
STA LNO
|
||||
STA LNO+1
|
||||
LDY #1
|
||||
.10 LDA WBUF,Y GET NEXT CHAR
|
||||
INY
|
||||
EOR #'0' MASK ASCII DIGIT
|
||||
CMP #9+1 IS IT GOOD DIGIT
|
||||
BCS .11 NO, USE LNO AS LINE TO GOTO
|
||||
PHA SAVE DIGIT
|
||||
LDA LNO MDIST=LNO
|
||||
STA MDIST LNO=DIGIT
|
||||
PLA
|
||||
STA LNO
|
||||
LDA LNO+1
|
||||
STA MDIST+1
|
||||
LDA #0
|
||||
STA LNO+1
|
||||
LDX #10
|
||||
.12 LDA LNO ADD MDIST TO LNO 10 TIMES
|
||||
CLC
|
||||
ADC MDIST
|
||||
STA LNO
|
||||
LDA LNO+1
|
||||
ADC MDIST+1
|
||||
STA LNO+1
|
||||
DEX
|
||||
BNE .12
|
||||
BEQ .10 ...ALWAYS
|
||||
.11 JSR SHOW.BEGIN
|
||||
.1 JSR P1.INIT START LINE # SEARCH
|
||||
LDA PTR1
|
||||
CMP PP.END
|
||||
BNE .20
|
||||
LDA PTR1+1
|
||||
CMP PP.END+1
|
||||
BEQ .4 STOP AT EOF
|
||||
.20 LDA LNO
|
||||
LDY #1
|
||||
SEC
|
||||
SBC (PTR1),Y COMPARE LINE LO
|
||||
STA ED.KEY
|
||||
LDA LNO+1
|
||||
INY
|
||||
SBC (PTR1),Y COMPARE LINE HI
|
||||
BCC .4 IF LNO<LINE THEN FOUND
|
||||
BEQ .3 IF EQUAL CK LO
|
||||
.2 JSR POP.LINE POP OFF LINE
|
||||
JMP .1 CK THIS LINE
|
||||
.3 LDA ED.KEY WAS LO LINE EQUAL?
|
||||
BNE .2 NO
|
||||
.4
|
||||
*--------------------------------
|
||||
SOFT LDX #$FF INIT STACK PTR
|
||||
TXS
|
||||
LDA NO.SHOW.FLAG DO WE NEED TO SHOW SCRN
|
||||
BNE .1 NO
|
||||
JSR SHOW.SCREEN PLOP UP THE SCRN
|
||||
.1 LDA #0 ZERO FLAG
|
||||
STA NO.SHOW.FLAG
|
||||
.2 JSR EDIT.LINE GET A KEY OR EDIT THE LINE
|
||||
LDY #0 KEY IN A REG
|
||||
|
||||
* allow lowercase too!!!
|
||||
|
||||
CMP #$60
|
||||
BCC .3
|
||||
SBC #$20
|
||||
|
||||
.3 CMP FTBL,Y HUNT FOR KEY CODE
|
||||
BEQ .4 FOUND IT
|
||||
INY NEXT ENTRY
|
||||
INY
|
||||
INY
|
||||
CPY #FTBL.Z
|
||||
BCC .3
|
||||
JSR M.BELL BAD KEY CODE
|
||||
JMP .2
|
||||
.4 JSR TOSUB PROCESS KEY
|
||||
JMP SOFT
|
||||
TOSUB LDA FTBL+2,Y
|
||||
PHA
|
||||
LDA FTBL+1,Y
|
||||
PHA
|
||||
RTS
|
||||
*--------------------------------
|
||||
FIXRST LDA M.RESET+1
|
||||
EOR #$A5 MAKE SURE WE DONE
|
||||
STA M.RESET+2 BOOT DISK UP
|
||||
RTS
|
||||
*--------------------------------
|
||||
ESCAPE LDA #$FF
|
||||
STA ESC.FLAG PUT INTO EDIT MODE
|
||||
BNE SET.NS DONT SHOW SCRN
|
||||
*--------------------------------
|
||||
COMPOSE LDA COMPOSE.FLG TOGGLE COMPOSE MODE FLAG
|
||||
EOR #1
|
||||
STA COMPOSE.FLG
|
||||
SET.NS LDA #1 DONT SHOW SCRN
|
||||
STA NO.SHOW.FLAG
|
||||
RTS ON RETURN TO MAIN LOOP
|
||||
*--------------------------------
|
||||
SPECIAL LDA #1
|
||||
STA SPECIAL.FLG SPECIAL KEY JUST FOR EDIT
|
||||
BNE SET.NS DONT SHOW SCRN
|
||||
*--------------------------------
|
||||
SET.LMARGIN LDA POSH CUR POSH IS LEFT MARGIN
|
||||
PHA
|
||||
LDA RT.FENCEL
|
||||
CLC
|
||||
ADC SCREEN.WIDTH
|
||||
SEC
|
||||
SBC #START.COL
|
||||
STA ED.KEY
|
||||
PLA
|
||||
CMP ED.KEY POSH< (RT.FENCEL+SCREEN.WIDTH-START.COL)
|
||||
BCS .1 NO, SO CANT SET MARGIN
|
||||
STA L.MARGIN
|
||||
|
||||
.1 JMP SET.NS
|
||||
*--------------------------------
|
||||
RETURN JSR SET.NS ASSUME WE DO NOT SHOW SCREEN
|
||||
LDA L.MARGIN BEGINNING OF LINE
|
||||
STA POSH NEW COLUMN POSN
|
||||
PHA
|
||||
LDA SCREEN.WIDTH
|
||||
LSR
|
||||
STA ED.KEY SAVE SW/2
|
||||
PLA
|
||||
SEC
|
||||
SBC ED.KEY LM-(SW/2)
|
||||
BCC .20 TOO FAR
|
||||
CMP #START.COL MUST BE > START.COL
|
||||
BCS .30 YES SO SET NEW MARGIN
|
||||
.20 LDA #START.COL START.COL IS GOOD MARGIN
|
||||
.30 CMP LEFT.MARGIN SEE IF ALREADY THERE
|
||||
BEQ .1 YES
|
||||
CMP RT.FENCEL MARGIN NOT PAST FENCE
|
||||
BCC .0
|
||||
CMP RT.FENCER
|
||||
BEQ .0
|
||||
BCC .0
|
||||
LDA RT.FENCEL
|
||||
.0 JSR SET.MARGIN
|
||||
JSR .4
|
||||
.1 LDA POSV
|
||||
CMP MAXV WAS *EOF* HIT?
|
||||
BCS .3 YES
|
||||
CMP LAST.LINE WAS HE ON LAST LINE?
|
||||
BCC .2 NO
|
||||
JSR POP.LINE YES, MOVE SCREEN DOWN 1 LINE
|
||||
JSR .4 MAKE SURE WE SHOW SCREEN
|
||||
.HS 2C BIT abs opcode skips 2 .3
|
||||
.2 INC POSV
|
||||
.3 LDA COMPOSE.FLG IF COMPOSE TOGGLE ON
|
||||
BEQ .5 NO
|
||||
JSR INSERT YES, INSERT NEW LINE
|
||||
.4 LDA #0 MAKE SURE WE SHOW
|
||||
STA NO.SHOW.FLAG SCREEN IF NEW LINE ADDED
|
||||
.5 RTS
|
||||
*--------------------------------
|
||||
SET.MARGIN STA LEFT.MARGIN
|
||||
CLC
|
||||
ADC SCREEN.WIDTH
|
||||
SEC
|
||||
SBC RM.ADJUST
|
||||
STA RIGHT.MARGIN
|
||||
RTS
|
||||
*--------------------------------
|
||||
* RESET VECTOR IS SAVED SO WE CAN INTERCEPT IT.
|
||||
* 3D0G AND 3D3G VECTORS SAVED FOR SOME PEOPLE
|
||||
* WITH OLD NON AUTO-START ROMS THEY GO TO MONITOR
|
||||
* AND WE CANT STOP IT. BUT WE CAN MODIFY DOS
|
||||
* HARD AND SOFT RESTART VECTORS TO CATCH HIS RETURN.
|
||||
* IN AND OUT HOOKS SAVED BECAUSE RESET CLOBERS
|
||||
* THEM AND VIDEX, STB80 PATCHES SET THEM UP
|
||||
* IT IS CRITICAL TO CATCH RESET BECAUSE THE PROGRAM MAY BE
|
||||
* SPLIT UP IF USER IS NOT AT BEGINING OF FILE AND SCROLLED
|
||||
* OFF SECTION CANT BE RECOVERED IF ASSEMBLER RESTARTS ON
|
||||
* US WITHOUT OUR KNOWLEDGE.
|
||||
*--------------------------------
|
||||
|
||||
MY.VECTOR .DA EXIT ADRS OF EDIT RESET HANDLER
|
||||
|
||||
*--------------------------------
|
||||
EXIT LDX #1
|
||||
.1 LDA SAVE.RSTV,X RESORE RESET VECTOR
|
||||
STA M.RESET,X
|
||||
LDA SAVE.3D1,X 3D1.3D2 ALSO
|
||||
STA $3D1,X
|
||||
LDA SAVE.3D4,X 3D4.3D5 ALSO
|
||||
STA $3D4,X
|
||||
LDA SAVE.36,X 36.37 ALSO
|
||||
STA $36,X
|
||||
LDA SAVE.38,X 38.39 ALSO
|
||||
STA $38,X
|
||||
DEX
|
||||
BPL .1
|
||||
TXS save dem bytes!
|
||||
JSR FIXRST FIX POWER UP BYTE
|
||||
|
||||
* only clear $130 - $16F!!!
|
||||
|
||||
LDX #$130
|
||||
LDA #0 thanxs Bill
|
||||
|
||||
.2 STA $100,X CLEAR HASH TABLE FOR
|
||||
INX ASSEMBLER SYMBOL TABLE
|
||||
CPX #$170
|
||||
BNE .2
|
||||
|
||||
*--------------------------------
|
||||
EXIT2 JSR SHOW.BEGIN GO TO BEGINING OF FILE
|
||||
LDA #23
|
||||
JSR MY.VTAB BOTTOM LINE
|
||||
INC CH MAKE SURE ASM DOES CRLF
|
||||
JSR P1.INIT
|
||||
LDA AUTO.REN CK FOR AUTO RENUMBER
|
||||
BEQ .1 NONE WANTED
|
||||
LDA AUTO.BASE RENUMBER THE PROGRAM
|
||||
STA PTR2
|
||||
LDA AUTO.BASE+1
|
||||
STA PTR2+1
|
||||
.0 JSR P1.ENDCK
|
||||
BEQ EXIT3 END OF PROGRAM
|
||||
LDA PTR2
|
||||
LDY #1
|
||||
STA (PTR1),Y
|
||||
INY
|
||||
LDA PTR2+1
|
||||
STA (PTR1),Y
|
||||
LDA PTR2
|
||||
CLC
|
||||
ADC AUTO.INC
|
||||
STA PTR2
|
||||
LDA PTR2+1
|
||||
ADC AUTO.INC+1
|
||||
STA PTR2+1
|
||||
BCS .3 ERROR IF OVERFLOW
|
||||
JSR P1.ADD
|
||||
JMP .0
|
||||
.1 JSR P1.ENDCK CK PROG LINE NUM=0
|
||||
BEQ EXIT3 END OF PROGRAM
|
||||
LDY #1
|
||||
LDA (PTR1),Y
|
||||
BNE .2
|
||||
INY
|
||||
LDA (PTR1),Y
|
||||
BEQ .3 YES MUST RENUMBER
|
||||
.2 JSR P1.ADD
|
||||
JMP .1
|
||||
.3 LDY #0 GIVE RENUMBER WARNING
|
||||
.4 LDA MESG,Y
|
||||
BEQ EXIT3
|
||||
JSR M.COUT
|
||||
INY
|
||||
BNE .4
|
||||
|
||||
EXIT3 JMP $3D0 NON LANG CARD EXIT
|
||||
|
||||
*--------------------------------
|
||||
|
||||
MESG .HS 8D8D8D87
|
||||
.AS -/*** PLEASE RENUMBER!/
|
||||
.HS 8D8700
|
||||
*--------------------------------
|
||||
FORM.GUIDE LDA FORM.FLG TOGGLE FORM GUIDE
|
||||
EOR #1
|
||||
STA FORM.FLG
|
||||
BEQ .1 OFF NOW
|
||||
|
||||
* suspect that something is wrong here...
|
||||
* Mike's comment adds 2,
|
||||
* but code adds 1
|
||||
|
||||
LDA POSV ON NOW SO ADD 2 TO POSV
|
||||
CLC MAKE SURE POSV
|
||||
ADC #1 STAYS ON SCREEN
|
||||
STA POSV
|
||||
|
||||
LDA #1
|
||||
LDY #22
|
||||
BNE .2
|
||||
.1 LDA POSV
|
||||
SEC
|
||||
SBC #1
|
||||
STA POSV
|
||||
LDA #0
|
||||
LDY #23
|
||||
.2 STA FIRST.LINE
|
||||
STY LAST.LINE
|
||||
CPY POSV
|
||||
BCS .3
|
||||
STY POSV
|
||||
.3 CMP POSV
|
||||
BCC .4
|
||||
STA POSV
|
||||
.4 RTS
|
||||
*--------------------------------
|
||||
SHOW.BEGIN JSR FIND.LAST.PAGE GET LAST 32 LINES
|
||||
LDA #32
|
||||
STA CTR
|
||||
.1 JSR GET.LINE GET THEM BACK FROM
|
||||
JSR CK.SPEND SCROLL LINE STACK
|
||||
BNE .2 GO GET MORE
|
||||
LDA LEFT.MARGIN RESET POSH, POSV
|
||||
STA POSH
|
||||
LDA FIRST.LINE
|
||||
STA POSV
|
||||
RTS
|
||||
.2 DEC CTR MORE LINES IN LN.TBL
|
||||
BNE .1 YES
|
||||
BEQ SHOW.BEGIN NO, FIND 32 MORE LINES
|
||||
*--------------------------------
|
||||
CK.SPEND LDA SP.BEG SEE IF END OF SCROLL
|
||||
CMP SP.END LINE STACK
|
||||
BNE .1
|
||||
LDA SP.BEG+1
|
||||
CMP SP.END+1
|
||||
.1 RTS
|
||||
*--------------------------------
|
||||
SHOW.END JSR POP.LINE POP ALL LINES OFF
|
||||
LDA PP.BEG FROM PROG AREA ONTO
|
||||
CMP PP.END SCROLL LINE STACK
|
||||
BNE SHOW.END
|
||||
LDA PP.BEG+1
|
||||
CMP PP.END+1
|
||||
BNE SHOW.END
|
||||
* AT *EOF* NOW, BACK UP LAST.LINE-FIRST.LINE LINES
|
||||
JSR FIND.LAST.PAGE
|
||||
LDA LAST.LINE
|
||||
STA POSV INSURE THAT POSV IS ON *EOF*
|
||||
SEC
|
||||
SBC FIRST.LINE
|
||||
STA CTR NUM LINES TO BACK UP
|
||||
.1 JSR GET.LINE BACK UP SO *EOF* IS ON
|
||||
JSR CK.SPEND BOTTOM OF PAGE
|
||||
BEQ .2 EXIT IF END SCROLL LINE STACK
|
||||
DEC CTR COUNT LINE PULLED
|
||||
BNE .1 GO PULL MORE LINES
|
||||
.2 JSR SHOW.SCREEN DISPLAY SCREEN
|
||||
INC NO.SHOW.FLAG PREVENT ANOTHER DISPLAY
|
||||
RTS
|
||||
*--------------------------------
|
||||
DELETE JSR LSTRIP STRIP OFF LINES TO CUR LINE
|
||||
LDA PP.BEG AT END OF PROG?
|
||||
CMP PP.END
|
||||
BNE .1
|
||||
LDA PP.BEG+1
|
||||
CMP PP.END+1
|
||||
BNE .1
|
||||
INC NO.SHOW.FLAG YES DONT SHOW SCRN
|
||||
BNE .2 ...ALWAYS
|
||||
.1 LDY #0 DEL CUR LINE
|
||||
LDA (PP.BEG),Y
|
||||
CLC
|
||||
ADC PP.BEG
|
||||
STA PP.BEG
|
||||
BCC .2
|
||||
INC PP.BEG+1
|
||||
.2 JMP LGRAB GRAB BACK PREV LINES
|
||||
*--------------------------------
|
||||
|
||||
; added $81 (1 space) to blank line for EDITing
|
||||
|
||||
INS.TBL
|
||||
|
||||
* better blank line
|
||||
|
||||
BL .DA #BLEN
|
||||
.DA $0000
|
||||
.DA #$81 (see...)
|
||||
.HS 00
|
||||
|
||||
BLEN .EQ *-BL
|
||||
|
||||
* DASHED COMMENT LINE
|
||||
* used RPT symbols! (for assembling)
|
||||
|
||||
DCL .DA #DCLEN
|
||||
.DA $0000
|
||||
.AS ';' $#*
|
||||
.DA #$C0,#RPT.LENG,#RPT.CHAR
|
||||
.HS 00
|
||||
|
||||
DCLEN .EQ *-DCL
|
||||
|
||||
*--------------------------------
|
||||
|
||||
DINSERT LDY #DCL-INS.TBL DASHED commment LINE INSERT
|
||||
.HS 2C BIT abs opcode skips 2 DINS.1
|
||||
|
||||
INSERT LDY #BL-INS.TBL BLANK LINE INSERT
|
||||
|
||||
DINS.1 LDA INS.TBL,Y GET LINE BYTE COUNT
|
||||
STA WBUF
|
||||
LDX #1
|
||||
.1 CPX WBUF
|
||||
BEQ .2
|
||||
INY
|
||||
LDA INS.TBL,Y COPY INTO WBUF
|
||||
STA WBUF,X
|
||||
INX
|
||||
BNE .1
|
||||
.2 LDA PP.BEG CK FOR ENOUGH SPACE
|
||||
SEC
|
||||
SBC SP.END
|
||||
STA PTR1
|
||||
LDA PP.BEG+1
|
||||
SBC SP.END+1
|
||||
BNE .3
|
||||
LDA PTR1
|
||||
CMP WBUF
|
||||
BCS .3
|
||||
JMP M.BELL NOT ENOUGH FREE MEMORY
|
||||
.3 JSR LSTRIP GET DOWN TO CUR LINE
|
||||
LDA PP.BEG
|
||||
SEC
|
||||
SBC WBUF ALLOCATE BYTES BEFORE
|
||||
STA PP.BEG CUR LINE
|
||||
LDA PP.BEG+1
|
||||
SBC #0
|
||||
STA PP.BEG+1
|
||||
LDA RPT.CHAR SET REPEAT CHAR
|
||||
STA WBUF+6
|
||||
LDA RPT.LENG AND LENGTH
|
||||
STA WBUF+5
|
||||
LDY #0
|
||||
LDX WBUF BYTE COUNT
|
||||
.4 LDA WBUF,Y
|
||||
STA (PP.BEG),Y PUT IN LINE DATA
|
||||
INY
|
||||
DEX
|
||||
BNE .4
|
||||
**** FALL INTO LGRAB ****
|
||||
*--------------------------------
|
||||
LGRAB LDA POSV GET BACK POSV-FIRST.LINE LINES
|
||||
SEC
|
||||
SBC FIRST.LINE
|
||||
BEQ .1
|
||||
STA CTR
|
||||
JSR FIND.LAST.PAGE
|
||||
.0 JSR GET.LINE
|
||||
DEC CTR
|
||||
BNE .0
|
||||
.1 RTS
|
||||
*--------------------------------
|
||||
LSTRIP LDA POSV POP DOWN TO POSV-FIRST.LINE LINES
|
||||
SEC
|
||||
SBC FIRST.LINE
|
||||
BEQ .1
|
||||
STA CTR
|
||||
.0 JSR POP.LINE
|
||||
DEC CTR
|
||||
BNE .0
|
||||
.1 RTS
|
||||
*--------------------------------
|
||||
MAN
|
||||
SAVE usr/src/fse/fse.s.2
|
||||
LOAD usr/src/fse/fse.s
|
||||
ASM
|
533
FSE/FSE.S.3.txt
Normal file
533
FSE/FSE.S.3.txt
Normal file
|
@ -0,0 +1,533 @@
|
|||
NEW
|
||||
AUTO 3,1
|
||||
*--------------------------------
|
||||
MOVE.LF LDA POSV
|
||||
CMP MAXV IS HE ON *EOF*
|
||||
BCS .2 YES, DONT CHANGE POSH
|
||||
LDY POSH
|
||||
CPY #START.COL IF ALREADY ON BEGINNING
|
||||
BEQ .2 DON'T MOVE LEFT
|
||||
CPY LEFT.MARGIN IF NOT ON CURRENT MARGIN
|
||||
BNE .1 GO MOVE LEFT
|
||||
JSR LEFT.PAGE OTHERWISE PAGE LEFT
|
||||
DEC POSH THEN MOVE LEFT
|
||||
RTS SHOW SCREEN SINCE HORIZONTAL PAGE
|
||||
.1 DEC POSH MOVE LEFT
|
||||
.2 INC NO.SHOW.FLAG DON'T SHOW SCREEN
|
||||
RTS UNLESS A HORIZONTAL PAGE DONE
|
||||
*--------------------------------
|
||||
MOVE.RT LDA POSV
|
||||
CMP MAXV IS HE ON *EOF*
|
||||
BCS INC.FLG YES, DONT CHANGE POSH
|
||||
LDA RT.FENCER DON'T MOVE RIGHT IF
|
||||
CMP POSH HE IS ON LAST COLUMN
|
||||
BEQ INC.FLG
|
||||
LDY RIGHT.MARGIN GET RIGHT MARGIN
|
||||
DEY
|
||||
CPY POSH IS HE IS NOT ON IT
|
||||
BNE .1 THEN MOVE RIGHT
|
||||
JSR RIGHT.PAGE ELSE HORIZONTAL PAGE
|
||||
LDY RIGHT.MARGIN
|
||||
DEY
|
||||
CPY POSH SEE IF HE IS
|
||||
BEQ .3 STILL ON RIGHT MARGIN
|
||||
INC POSH MOVE RIGHT IF NOT
|
||||
.3 RTS
|
||||
.1 INC POSH MOVE RIGHT
|
||||
INC.FLG INC NO.SHOW.FLAG DON'T SHOW SCREEN UNLESS
|
||||
RTS HORIZONTAL PAGE DONE
|
||||
*--------------------------------
|
||||
RIGHT.PAGE LDA LEFT.MARGIN HORIZONTAL PAGE RIGHT
|
||||
CLC
|
||||
ADC HORT.PAGE
|
||||
CMP RT.FENCEL UNLESS PAST RIGHTMOST LIMIT
|
||||
BCS .1 YES, PAST LIMIT
|
||||
CMP POSH SEE IF POSH STILL ON SCREEN
|
||||
BCC .2 YES
|
||||
STA POSH NO, MAKE IT FIT ON LEFT MARGIN
|
||||
BCS .2 ...ALWAYS
|
||||
.1 LDA LEFT.MARGIN
|
||||
CMP RT.FENCEL WAS HE ALREADY ON RIGHTMOST LIMIT
|
||||
BEQ INC.FLG YES, LET HIM HANG THERE
|
||||
LDA POSH COMPUTE NEW POSH
|
||||
SEC REMOVE LEFT MARGIN BIAS
|
||||
SBC LEFT.MARGIN
|
||||
CLC
|
||||
ADC RT.FENCEL ADD RIGHTMOST MARGIN LIMIT BIAS
|
||||
STA POSH
|
||||
LDA RT.FENCEL SET NEW LEFT MARGIN
|
||||
.2 JMP SET.MARGIN
|
||||
*--------------------------------
|
||||
LEFT.PAGE LDA #START.COL SEE IF DOING A LEFT PAGE
|
||||
CLC MAKES LEFT MARGIN BEFORE THE
|
||||
ADC HORT.PAGE FIRST COLUMN
|
||||
CMP LEFT.MARGIN
|
||||
BEQ .1 DO THE LEFT PAGE
|
||||
BCC .1 DO THE LEFT PAGE
|
||||
LDA #START.COL SET LEFT MARGIN TO COL 1
|
||||
CMP LEFT.MARGIN UNLESS IT IS ALREADY THERE
|
||||
BNE LIMITM NOT COL 1, SO USE COL 1
|
||||
BEQ INC.FLG YES COL 1, SO STAY THERE
|
||||
.1 LDA LEFT.MARGIN LEFT.MARGIN - HORT.PAGE
|
||||
SEC IS NEW LEFT MARGIN
|
||||
SBC HORT.PAGE
|
||||
LIMITM JSR SET.MARGIN SET NEW LEFT MARGIN
|
||||
**** RIGHT.MARGIN IS IN A REG
|
||||
LIMITR CMP POSH IF RIGHT.MARGIN <= POSH
|
||||
BEQ .1 THEN SET NEW POSH
|
||||
BCS .2 ELSE EXIT
|
||||
.1 SEC SET NEW POSH = RM-1
|
||||
SBC #1 TO KEEP THE CURSOR
|
||||
STA POSH STILL ON SCREEN
|
||||
.2 RTS
|
||||
*--------------------------------
|
||||
LN.TOGL LDA #START.COL TOGGLE LINE NUMBERS ON/OFF
|
||||
EOR LN.FLAG BY EOR WITH COL 1 POSN
|
||||
STA LN.FLAG TOGGLES BETWEEN 0 AND 6
|
||||
STA RM.ADJUST TOGGLES BETWEEN 0 AND 6
|
||||
LDA LEFT.MARGIN SET NEW LEFT MARGIN
|
||||
BNE LIMITM AND LIMIT POSH INSIDE WINDOW
|
||||
*--------------------------------
|
||||
MOVE.UP LDA POSV ARE WE ON TOP LINE
|
||||
CMP FIRST.LINE
|
||||
BNE .1 NO
|
||||
JSR FIND.LAST.PAGE GET LAST 32 LINES LENGTHS
|
||||
JMP GET.LINE AND PULL 1 LINE OFF SCROLL STACK
|
||||
.1 DEC POSV MOVE POSV UP
|
||||
INC NO.SHOW.FLAG
|
||||
RTS
|
||||
*--------------------------------
|
||||
MOVE.DN LDA POSV
|
||||
CMP MAXV ARE WE ON *EOF*
|
||||
BCS .2 YES, STAY THERE!
|
||||
CMP LAST.LINE ARE WE ON BOTTOM LINE
|
||||
BCC .1 NO SO MOVE DOWN
|
||||
JMP POP.LINE ELSE PUT LINE ON SCROLL STACK
|
||||
.1 INC POSV MOVE DOWN
|
||||
LDA POSV
|
||||
CMP MAXV IF MOVED DOWN TO *EOF*
|
||||
BNE .2 NO
|
||||
LDA LEFT.MARGIN YES, CURSOR TO LEFT
|
||||
STA POSH DONT LET IT DANGLE PAST *EOF*
|
||||
.2 INC NO.SHOW.FLAG DONT SHOW NEW SCREEN
|
||||
RTS
|
||||
*--------------------------------
|
||||
ROLL.U100 LDA ROLL.VALUE2 GET LONG SCROLL VALUE
|
||||
BNE ROLL.U
|
||||
ROLL.UP JSR GET.ROLL.VALUE GET SHORT SCROLL VALUE
|
||||
ROLL.U STA CTR PUT IN COUNTER
|
||||
.1 JSR POP.LINE PUT LINES ON SCROLL STACK
|
||||
DEC CTR UNTIL CTR GOES ZERO
|
||||
BNE .1
|
||||
RTS
|
||||
*--------------------------------
|
||||
ROLL.D100 LDA ROLL.VALUE2 GET LONG SCROLL VALUE
|
||||
BNE ROLL.D
|
||||
ROLL.DN JSR GET.ROLL.VALUE GET SHORT SCROLL VALUE
|
||||
ROLL.D SEC
|
||||
SBC #32 IS THERE AT LEAST 32 LINES
|
||||
BCC .1 NO
|
||||
PHA YES, DO BLOCKS OF 32 LINES
|
||||
LDA #32 UNTIL LESS THAN 32 TO DO
|
||||
JSR .90 ROLL DOWN 32 LINES
|
||||
PLA
|
||||
JMP ROLL.D GO TRY FOR NEXT 32 LINES
|
||||
.1 ADC #32 ADD BACK OFFSET
|
||||
BEQ .99 EXIT IF EXACTLY 32 LINES
|
||||
.90 STA CTR ROLL DOWN LINES
|
||||
JSR FIND.LAST.PAGE FIND LAST 32 LINE LENGTHS
|
||||
.91 JSR GET.LINE GET THEM FROM SCROLL STACK
|
||||
DEC CTR
|
||||
BNE .91
|
||||
.99 RTS
|
||||
*--------------------------------
|
||||
GET.ROLL.VALUE
|
||||
LDA LAST.LINE IF L-F+1 < ROLL
|
||||
SEC THEN USE L-F+1
|
||||
SBC FIRST.LINE ELSE USE ROLL
|
||||
CLC
|
||||
ADC #1
|
||||
CMP ROLL.VALUE
|
||||
BCC RTS2
|
||||
LDA ROLL.VALUE
|
||||
RTS2 RTS
|
||||
*--------------------------------
|
||||
POP.LINE LDA PP.BEG
|
||||
STA PTR1 PTR1=PP.BEG
|
||||
CMP PP.END PP.BEG<PP.END?
|
||||
LDA PP.BEG+1
|
||||
STA PTR1+1
|
||||
SBC PP.END+1
|
||||
BCS RTS2 NOT LESS
|
||||
LDA SP.END PTR2=SP.END
|
||||
STA PTR2 SP.END=SP.END+SIZE
|
||||
LDY #0
|
||||
CLC
|
||||
ADC (PTR1),Y
|
||||
STA SP.END
|
||||
LDA SP.END+1
|
||||
STA PTR2+1
|
||||
ADC #0
|
||||
STA SP.END+1
|
||||
CLC PP.BEG=PP.BEG+SIZE
|
||||
LDA (PTR1),Y
|
||||
ADC PP.BEG
|
||||
STA PP.BEG
|
||||
LDA #0
|
||||
ADC PP.BEG+1
|
||||
STA PP.BEG+1
|
||||
JMP MOVE12 MOVE LINE (PTR1) TO (PTR2)
|
||||
*--------------------------------
|
||||
GET.LINE LDY INDEX GET LN.CNT INDEX
|
||||
DEY POSITION TO PREV LINE ENTRY
|
||||
TYA
|
||||
AND #$1F MASK TO MAKE INDEX CIRCULAR
|
||||
TAY
|
||||
STY INDEX
|
||||
LDA LN.CNT,Y GET LENGTH OF LINE
|
||||
STA PTR2
|
||||
BEQ RTS2 NO MORE LINES
|
||||
LDA SP.END PTR1=SP.END-SIZE
|
||||
SEC SP.END=PTR1
|
||||
SBC PTR2
|
||||
STA SP.END
|
||||
STA PTR1
|
||||
LDA SP.END+1
|
||||
SBC #0
|
||||
STA SP.END+1
|
||||
STA PTR1+1
|
||||
LDA PP.BEG PTR2=PP.BEG-SIZE
|
||||
SEC PP.BEG=PTR2
|
||||
SBC PTR2
|
||||
STA PP.BEG
|
||||
STA PTR2
|
||||
LDA PP.BEG+1
|
||||
SBC #0
|
||||
STA PP.BEG+1
|
||||
STA PTR2+1
|
||||
*** FALL INTO MOVE12
|
||||
*--------------------------------
|
||||
MOVE12 LDY #0 GET # BYTES IN LINE
|
||||
LDA (PTR1),Y
|
||||
STA (PTR2),Y MOVE FIRST BYTE
|
||||
TAY
|
||||
DEY -1 FOR INDEXING
|
||||
.1 LDA (PTR1),Y MOVE A BYTE (PTR1) TO (PTR2)
|
||||
STA (PTR2),Y
|
||||
DEY NEXT BYTE
|
||||
BNE .1
|
||||
RTS
|
||||
*--------------------------------
|
||||
FIND.LAST.PAGE
|
||||
LDY #31 INIT INDEX
|
||||
LDA #0
|
||||
STA INDEX
|
||||
.1 STA LN.CNT,Y ZERO LN.CNT TABLE ENTRIES
|
||||
DEY
|
||||
BPL .1
|
||||
LDA SP.BEG SET PTR1=SP.BEG
|
||||
STA PTR1
|
||||
CMP SP.END SEE IF END OF SCROLL STACK
|
||||
BNE .2 NOT END
|
||||
LDA SP.BEG+1
|
||||
CMP SP.END+1
|
||||
BNE .3 NOT END
|
||||
RTS YES, END OF STACK
|
||||
.2 LDA SP.BEG+1
|
||||
.3 STA PTR1+1
|
||||
.4 LDY #0 GET LINE LENGTH
|
||||
LDA (PTR1),Y
|
||||
PHA SAVE IT
|
||||
LDY INDEX
|
||||
STA LN.CNT,Y PUT IT IN TABLE
|
||||
INY NEXT TABLE ENTRY
|
||||
TYA
|
||||
AND #$1F WRAP ARROUND
|
||||
STA INDEX SAVE INDEX
|
||||
PLA RESTORE LENGTH
|
||||
CLC
|
||||
ADC PTR1 PTR1=PTR1+LENGTH
|
||||
STA PTR1
|
||||
LDA #0
|
||||
ADC PTR1+1
|
||||
STA PTR1+1
|
||||
LDA PTR1 IF PTR1=SP.END
|
||||
CMP SP.END THEN END OF SEARCH
|
||||
BNE .4 AND TABLE HAS LAST
|
||||
LDA PTR1+1 32 LINE LENGTHS
|
||||
CMP SP.END+1
|
||||
BNE .4 SEARCH FOR MORE
|
||||
RTS END OF SEARCH
|
||||
*--------------------------------
|
||||
FIX.POSV CMP POSV
|
||||
BEQ .1 IF CURSOR POSV<=LAST LINE SHOWN
|
||||
BCS .2 NO, ITS OK
|
||||
.1 STA POSV SET NEW CURSOR POSN
|
||||
LDA LEFT.MARGIN TO *EOF* LINE
|
||||
STA POSH
|
||||
LDA POSV
|
||||
.2 RTS
|
||||
*--------------------------------
|
||||
SHOW.EOF LDA CTR POSITION VERTICALLY
|
||||
JSR MY.VTAB
|
||||
LDA #0 COLUMN 0
|
||||
JSR MY.HTAB
|
||||
LDA LN.FLAG SEE IF LINE NUMBERS ON SCREEN
|
||||
BEQ .2 NO
|
||||
.0 LDY #0
|
||||
.1 LDA #$A0 OUTPUT BLANKS FOR LINE NUMBER
|
||||
JSR MY.COUT
|
||||
INY
|
||||
CPY RM.ADJUST
|
||||
BCC .1
|
||||
.2 LDY #0
|
||||
.3 LDA Q.EOF,Y PRINT "*EOF*
|
||||
JSR MY.COUT
|
||||
INY
|
||||
CPY #5
|
||||
BCC .3
|
||||
JMP MY.CLREOP CLEAR TO END OF PAGE
|
||||
*
|
||||
Q.EOF .AS -/*EOF*/
|
||||
*--------------------------------
|
||||
SHOW.SCREEN
|
||||
LDA LEFT.MARGIN
|
||||
STA FILL.TO SET BLANK FILL LIMIT
|
||||
JSR P1.INIT
|
||||
LDY #0 SHOW BANNER ON LINE 0
|
||||
JSR BANNER
|
||||
LDA FIRST.LINE INIT FIRST DISPLAY LINE
|
||||
STA CTR
|
||||
.1 JSR P1.ENDCK
|
||||
BEQ .99 END OF PROG LINES
|
||||
.2 LDA ESC.FLAG ARE WE IN EDIT MODE?
|
||||
BEQ .4 NO
|
||||
LDA CTR
|
||||
CMP POSV IS THIS THE EDIT LINE
|
||||
BNE .4 NO
|
||||
JSR REST.WBUF YES SHOW THE SAVED WBUF
|
||||
JMP .5
|
||||
.4 JSR GET.LINE.IN.WBUF GET SOURCE CODE INTO WBUF
|
||||
.5 JSR SHOW.LINE.IN.WBUF SHOW WBUF
|
||||
JSR P1.ADD BUMP TO NEXT LINE
|
||||
INC CTR
|
||||
LDA CTR
|
||||
CMP LAST.LINE END OF SCREEN
|
||||
BCC .1 NO
|
||||
BEQ .1
|
||||
CLC
|
||||
ADC #1
|
||||
STA MAXV SET MAX = LINE 25
|
||||
BNE .7 ...ALWAYS
|
||||
.99 LDA CTR
|
||||
STA MAXV MAX IS WHERE WE ARE
|
||||
CMP LAST.LINE
|
||||
BEQ .6
|
||||
BCS .7
|
||||
.6 JSR FIX.POSV ADJUST POSV AND POSH
|
||||
JSR SHOW.EOF PUT *EOF* ON SCREEN
|
||||
.7 LDY #23 PUT BANNER ON LINE 23
|
||||
*** FALL INTO BANNER
|
||||
*--------------------------------
|
||||
BANNER LDA FORM.FLG IF FORM FLAG NOT ON
|
||||
BNE .1
|
||||
RTS JUST RETURN
|
||||
.1 STY CTR ELSE SAVE LINE
|
||||
LDA #0 PUT EOL AT WBUF END
|
||||
STA WBUF+255
|
||||
LDY #254 FILL WBUF WITH
|
||||
LDA #'. "."
|
||||
.2 STA WBUF,Y
|
||||
DEY
|
||||
CPY #START.COL-1
|
||||
BNE .2
|
||||
LDA #'+
|
||||
STA WBUF+START.COL+5-1
|
||||
LDA #9 INIT N=10-1
|
||||
.3 PHA SAVE N
|
||||
CLC
|
||||
ADC #1 LNO=N+1
|
||||
STA LNO SET NEW LINE NUM
|
||||
LDA #0
|
||||
STA LNO+1
|
||||
JSR CVRT.LNX CVRT TO ASCII DECIMAL
|
||||
PLA GET BACK N
|
||||
TAY
|
||||
LDA #'+
|
||||
STA WBUF+START.COL,Y MARK OFF +00
|
||||
CPY #254-START.COL-5
|
||||
BCS .4
|
||||
STA WBUF+START.COL+5,Y AND +05
|
||||
.4 LDA WBUF+2 MOVE 1ST DIGIT
|
||||
STA WBUF+START.COL+1,Y
|
||||
LDA WBUF+3 MOVE 2ND DIGIT
|
||||
STA WBUF+START.COL+2,Y
|
||||
LDA WBUF+4 MOVE 3RD DIGIT
|
||||
STA WBUF+START.COL+3,Y
|
||||
TYA
|
||||
ADC #10 N=N+10
|
||||
CMP #254-START.COL-5 SEE IF ALL DONE
|
||||
BCC .3 NO, BUILD MORE
|
||||
.5 LDY #START.COL-1 FILL START WITH BLANKS
|
||||
* dcj *BNE FILL.BACK AND SHOW WBUF
|
||||
*--------------------------------
|
||||
FILL.BACK JSR FILL.WBUF BACK FILL WBUF WITH BLANKS
|
||||
BEQ SHOW.LINE.IN.WBUF BA THEN SHOW WBUF
|
||||
*--------------------------------
|
||||
E.SHOW.LINE LDA POSV
|
||||
STA CTR
|
||||
*--------------------------------
|
||||
SHOW.LINE.IN.WBUF
|
||||
LDA CTR SET VERT POSN
|
||||
JSR MY.VTAB
|
||||
LDA #0
|
||||
JSR MY.HTAB START COL 0 ON SCREEN
|
||||
LDA LN.FLAG TEST LINE NUM FLAG
|
||||
BEQ .2 NO LINE NUMBERS
|
||||
LDY #0
|
||||
.1 LDA WBUF,Y SHOW COL 0 THRU START.COL-1
|
||||
BEQ .99 AS LINE NUM
|
||||
ORA #$80
|
||||
JSR MY.COUT
|
||||
INY
|
||||
CPY #START.COL
|
||||
BCC .1
|
||||
*** TYA
|
||||
*** JSR MY.HTAB
|
||||
.2 LDY LEFT.MARGIN START AT LEFT MARGIN
|
||||
.3 LDA WBUF,Y IN WBUF AND PRINT ON SCREEN
|
||||
BEQ .99 END OF WBUF
|
||||
ORA #$80
|
||||
JSR MY.COUT
|
||||
INY
|
||||
CPY RIGHT.MARGIN GO TO RIGHT MARGIN
|
||||
BCC .3
|
||||
.99 JMP MY.CLREOL ZAP TO EOL
|
||||
*--------------------------------
|
||||
FILL.WBUF LDA #$20 SET A BLANK
|
||||
.1 STA WBUF,Y FILL WBUF
|
||||
DEY UNTIL Y GOES 0
|
||||
BNE .1
|
||||
STA WBUF (DOESN'T AFFECT STATUS)
|
||||
RTS RETURN EQ STATUS
|
||||
*--------------------------------
|
||||
GET.LINE.IN.WBUF
|
||||
LDA PTR1 SRCP=PTR1
|
||||
STA SRCP
|
||||
LDA PTR1+1
|
||||
STA SRCP+1
|
||||
LDA #0
|
||||
STA RPTCNT INIT REPEAT COUNT
|
||||
STA RPTCHR
|
||||
JSR GNBI SRCP=SRCP+1
|
||||
JSR GNB GET A BYTE
|
||||
STA LNO SAVE LNO
|
||||
JSR GNB
|
||||
STA LNO+1
|
||||
LDA LN.FLAG TEST FOR LINE NUM SHOW
|
||||
BEQ .1 NO
|
||||
LDA LNO
|
||||
ORA LNO+1
|
||||
BEQ .1 BLANK LINE NUM IF=0
|
||||
JSR CVRT.LNO ELSE CONVERT IT TO ASCII
|
||||
LDX #START.COL
|
||||
BNE .3
|
||||
.1 LDX #0 NO LINE NUM
|
||||
.2 LDA #$20 SHOW BLANKS INSTEAD
|
||||
STA WBUF,X
|
||||
INX
|
||||
CPX #START.COL
|
||||
BCC .2
|
||||
.3 JSR NTKN GET A SOURCE LINE CHAR
|
||||
STA WBUF,X PUT IT IN WBUF
|
||||
INX NEXT POSN
|
||||
TAY TEST FOR END CHAR
|
||||
BNE .3
|
||||
LDA #$20 MAKE SURE WBUF IS FILLED
|
||||
DEX TO LEFT MARGIN
|
||||
.4 CPX FILL.TO WITH BLANKS
|
||||
BCS .5
|
||||
STA WBUF,X
|
||||
INX
|
||||
BNE .4 ...ALWAYS
|
||||
.5 LDA #0 THEN PUT DOWN END CODE
|
||||
STA WBUF,X
|
||||
RTS
|
||||
*--------------------------------
|
||||
CVRT.LNX LDY #0
|
||||
LDA #1
|
||||
STA CV.DIGFLG NO ZERO SUPPRESS
|
||||
BNE CVRT.L
|
||||
CVRT.LNO LDY #0 ALLOW ZERO SUPPRESS
|
||||
STY CV.DIGFLG
|
||||
CVRT.L LDX #4 5 DIGITS
|
||||
.1 LDA #$30
|
||||
.2 PHA
|
||||
SEC
|
||||
LDA LNO
|
||||
SBC DTBL,X
|
||||
PHA
|
||||
LDA LNO+1
|
||||
SBC DTBH,X
|
||||
BCC .3
|
||||
STA LNO+1
|
||||
PLA
|
||||
STA LNO
|
||||
PLA
|
||||
ADC #0
|
||||
BNE .2
|
||||
.3 PLA
|
||||
PLA
|
||||
CPX #0
|
||||
BEQ .6
|
||||
CMP #$30
|
||||
BNE .6 NON ZERO PREVENT ZERO SUPPRESS
|
||||
LDA CV.DIGFLG TEST ZERO SUP
|
||||
BNE .5 NONE
|
||||
LDA #$20 SUP ZERO WITH BLANK
|
||||
BNE .4
|
||||
.5 LDA #$30 PRINT ZERO
|
||||
.6 INC CV.DIGFLG PREVENT ZERO SUP
|
||||
.4 STA WBUF,Y STUFF DIGIT IN WBUF
|
||||
INY
|
||||
DEX
|
||||
BPL .1 GET NEXT DIGIT
|
||||
LDA #$20 PUT BLANK AT END
|
||||
STA WBUF,Y
|
||||
RTS
|
||||
DTBL .DA #1,#10,#100,#1000,#10000
|
||||
DTBH .DA /1,/10,/100,/1000,/10000
|
||||
*--------------------------------
|
||||
NTKN LDY #0
|
||||
LDA RPTCNT GET REPEAT COUNT
|
||||
BNE .3 IF >0 USE REPEAT CHAR
|
||||
LDA (SRCP),Y ELSE GET SOURCE CHAR
|
||||
BPL GNBI BUMP PTR IF NORMAL ASCII
|
||||
AND #$7F MASK HIGH BIT OF TOKEN OFF
|
||||
CMP #$40 $00-$3F IS BLANK COMPRESSION
|
||||
BCC .1 YES BLANK COMPRESSION
|
||||
JSR GNBI POSN TO NEXT BYTE
|
||||
JSR GNB GET BYTE
|
||||
STA RPTCNT USE AS REP COUNT
|
||||
LDA (SRCP),Y NEXT BYTE
|
||||
BNE .2
|
||||
.1 AND #$3F MASK COUNT
|
||||
STA RPTCNT SAVE REP COUNT
|
||||
LDA #$20 BLANK IS REP CHAR
|
||||
.2 STA RPTCHR SET REP CHAR
|
||||
JSR GNBI BUMP TO NEXT BYTE
|
||||
.3 DEC RPTCNT COUNT DOWN REP CHAR
|
||||
LDA RPTCHR RETURN REP CHAR
|
||||
RTS
|
||||
*--------------------------------
|
||||
GNB LDY #0 GET SOURCE BYTE
|
||||
LDA (SRCP),Y
|
||||
GNBI INC SRCP ADD 1 TO SRCP
|
||||
BNE .1
|
||||
INC SRCP+1
|
||||
.1 RTS
|
||||
*--------------------------------
|
||||
MAN
|
||||
SAVE usr/src/fse/fse.s.3
|
||||
LOAD usr/src/fse/fse.s
|
||||
ASM
|
112
FSE/FSE.S.A2.txt
Normal file
112
FSE/FSE.S.A2.txt
Normal file
|
@ -0,0 +1,112 @@
|
|||
NEW
|
||||
AUTO 3,1
|
||||
*--------------------------------
|
||||
A.YSAVE .EQ VAR.BEG-1
|
||||
A.CHR.UNDER.CURS .EQ A.YSAVE-1
|
||||
*--------------------------------
|
||||
* STANDARD VIDEO JUMP VECTORS
|
||||
* 1. READ KEYBOARD KEY CODE
|
||||
* TURNS ON CURSOR
|
||||
* GETS KEY CODE
|
||||
* TURNS OFF CURSOR
|
||||
* REG-A HAS KEY CODE SIGN BIT ON.
|
||||
* 2. HORIZONTAL TAB
|
||||
* REG-A HAS TAB 0-39
|
||||
* 3. VERTICAL TAB
|
||||
* REG-A HAS TAB 0-23
|
||||
* 4. CLEAR TO END OF LINE
|
||||
* 5. CLEAR TO END OF SCREEN
|
||||
* 6. CHARACTER OUTPUT ROUTINE
|
||||
* REG-A HAS CHAR TO OUTPUT.
|
||||
* MUST NOT SCROLL SCREEN OR
|
||||
* GO TO NEXT LINE WHEN LAST
|
||||
* CHARACTER IS PRINTED ON A LINE.
|
||||
*--------------------------------
|
||||
JMP A.RD.KBD
|
||||
JMP A.MY.HTAB
|
||||
JMP A.MY.VTAB
|
||||
JMP A.MY.CLREOL
|
||||
JMP A.MY.CLREOP
|
||||
JMP A.MY.COUT
|
||||
*--------------------------------
|
||||
A.MY.CLP LDA CTR
|
||||
JSR A.MY.VTAB
|
||||
A.MY.CLREOP JSR A.MY.CLREOL ZAP REST OF LINE
|
||||
LDA #0
|
||||
JSR A.MY.HTAB NEXT LINE ZAPPED FROM COL 0
|
||||
INC CTR BUMP COUNT TO NEXT LINE
|
||||
LDA CTR
|
||||
CMP LAST.LINE END OF PAGE?
|
||||
BCC A.MY.CLP < END
|
||||
BEQ A.MY.CLP = END
|
||||
RTS > END
|
||||
*--------------------------------
|
||||
A.MY.HTAB STA CH SET TAB VALUE
|
||||
RTS
|
||||
*--------------------------------
|
||||
A.MY.VTAB STA CV SET TAB VALUE
|
||||
JMP M.BASCALC COMPUTE NEW COUT BASE ADRS
|
||||
*--------------------------------
|
||||
A.MY.COUT STY A.YSAVE
|
||||
LDY CH
|
||||
CMP #$A0
|
||||
BCS .1 NOT CONTROL CHAR
|
||||
AND #$7F ELSE MAKE CHAR INVERSE
|
||||
.1 STA (BASEL),Y PUT CHAR ON SCREEN
|
||||
INY NEXT COLUMN
|
||||
STY CH
|
||||
LDY A.YSAVE
|
||||
RTS
|
||||
*--------------------------------
|
||||
A.MY.CLREOL LDY CH
|
||||
.1 LDA #$A0 A-REG = BLANK
|
||||
CPY SCREEN.WIDTH
|
||||
BCS .2
|
||||
JSR A.MY.COUT OUTPUT BLANKS UNTIL SCREEN WIDTH
|
||||
LDY CH
|
||||
BNE .1 ...ALWAYS
|
||||
.2 RTS
|
||||
*--------------------------------
|
||||
A.RD.KBD JSR A.CURSOR.ON TURN ON CURSOR
|
||||
.1 LDA $C000 WAIT FOR KEY
|
||||
BPL .1
|
||||
BIT $C010 KILL FLAG BY STROBE
|
||||
PHA
|
||||
JSR A.CURSOR.OFF TURN OFF CURSOR
|
||||
PLA RETURN REG-A WITH CHAR
|
||||
RTS
|
||||
*--------------------------------
|
||||
A.CURSOR.ON LDA POSV
|
||||
JSR A.MY.VTAB POSITION VERTICALLY
|
||||
LDA POSH
|
||||
SEC
|
||||
SBC LEFT.MARGIN
|
||||
CLC
|
||||
ADC RM.ADJUST
|
||||
JSR A.MY.HTAB POSITION HORIZONTALLY
|
||||
LDY CH
|
||||
LDA (BASEL),Y GET CHAR
|
||||
STA A.CHR.UNDER.CURS
|
||||
LDA ESC.FLAG
|
||||
BNE .1
|
||||
LDA #'+ PLUS CURSOR FOR CURSOR MODE
|
||||
BNE .2
|
||||
.1 LDA (BASEL),Y
|
||||
AND #$7F
|
||||
CMP #$60 IS CHAR ON SCREEN LOWER CASE
|
||||
BCC .2 NO
|
||||
AND #$DF FORCE LOWER CASE TO UPPER CASE
|
||||
.2 AND #$3F MAKE FLASHING CHAR
|
||||
ORA #$40
|
||||
STA (BASEL),Y
|
||||
RTS
|
||||
*--------------------------------
|
||||
A.CURSOR.OFF LDY CH
|
||||
LDA A.CHR.UNDER.CURS
|
||||
STA (BASEL),Y RESTORE SCREEN CHAR
|
||||
RTS
|
||||
*--------------------------------
|
||||
MAN
|
||||
SAVE usr/src/fse/fse.s.a2
|
||||
LOAD usr/src/fse/fse.s
|
||||
ASM
|
240
FSE/FSE.S.A2E.txt
Normal file
240
FSE/FSE.S.A2E.txt
Normal file
|
@ -0,0 +1,240 @@
|
|||
NEW
|
||||
AUTO 3,1
|
||||
*--------------------------------
|
||||
|
||||
D.YSAVE .EQ VAR.BEG-1
|
||||
D.CHR.UNDER.CURS .EQ D.YSAVE-1
|
||||
|
||||
*--------------------------------
|
||||
* APPLE IIE VIDEO JUMP VECTORS
|
||||
* 1. READ KEYBOARD KEY CODE
|
||||
* TURNS ON CURSOR
|
||||
* GETS KEY CODE
|
||||
* TURNS OFF CURSOR
|
||||
* REG-A HAS KEY CODE SIGN BIT ON.
|
||||
* 2. HORIZONTAL TAB
|
||||
* REG-A HAS TAB 0-79
|
||||
* 3. VERTICAL TAB
|
||||
* REG-A HAS TAB 0-23
|
||||
* 4. CLEAR TO END OF LINE
|
||||
* 5. CLEAR TO END OF SCREEN
|
||||
* 6. CHARACTER OUTPUT ROUTINE
|
||||
* REG-A HAS CHAR TO OUTPUT.
|
||||
* MUST NOT SCROLL SCREEN OR
|
||||
* GO TO NEXT LINE WHEN LAST
|
||||
* CHARACTER IS PRINTED ON A LINE.
|
||||
*--------------------------------
|
||||
|
||||
JMP D.RD.KBD
|
||||
* JMP D.MY.HTAB
|
||||
D.MY.HTAB
|
||||
|
||||
STA CH set tab value
|
||||
RTS
|
||||
|
||||
JMP D.MY.VTAB
|
||||
JMP D.MY.CLREOL
|
||||
JMP D.MY.CLREOP
|
||||
* JMP D.MY.COUT
|
||||
|
||||
*--------------------------------
|
||||
|
||||
D.MY.COUT
|
||||
|
||||
STY D.YSAVE
|
||||
PHA SAVE ORIG CHAR
|
||||
CMP #$A0 CONVERT CNTRL CHARS TO INVERSE ALPHA
|
||||
BCS .1 REG CHAR
|
||||
AND #$7F CNTRL CHAR
|
||||
* dcj *ORA #$40 makes mousetext!!!
|
||||
|
||||
.1 PHA store in-line to speed it up some
|
||||
STA D.SET80COL
|
||||
STA D.SET80VID
|
||||
STA D.SETALTCHR
|
||||
LDA CH
|
||||
LSR
|
||||
TAY
|
||||
PLA
|
||||
PHP
|
||||
SEI
|
||||
BIT D.TXTPAGE2
|
||||
BCC .2
|
||||
BIT D.TXTPAGE1
|
||||
|
||||
.2 STA (BASEL),Y
|
||||
BIT D.TXTPAGE1
|
||||
PLP
|
||||
INC CH
|
||||
PLA RESTORE ORIG CHAR
|
||||
LDY D.YSAVE
|
||||
|
||||
D.SEV RTS
|
||||
|
||||
*--------------------------------
|
||||
|
||||
D.MY.CLP
|
||||
|
||||
LDA CTR
|
||||
JSR D.MY.VTAB
|
||||
|
||||
D.MY.CLREOP
|
||||
|
||||
JSR D.MY.CLREOL ZAP REST OF LINE
|
||||
LDA #0
|
||||
JSR D.MY.HTAB NEXT LINE ZAPPED FROM COL 0
|
||||
INC CTR BUMP COUNT TO NEXT LINE
|
||||
LDA CTR
|
||||
CMP LAST.LINE END OF PAGE?
|
||||
BCC D.MY.CLP < END
|
||||
BEQ D.MY.CLP = END
|
||||
RTS > END
|
||||
|
||||
*--------------------------------
|
||||
|
||||
D.MY.VTAB STA CV SET TAB VALUE
|
||||
JMP M.BASCALC COMPUTE NEW COUT BASE ADRS
|
||||
|
||||
*--------------------------------
|
||||
|
||||
D.RD80VID .EQ $C01F
|
||||
D.TXTPAGE2 .EQ $C055
|
||||
D.TXTPAGE1 .EQ $C054
|
||||
D.SET80COL .EQ $C001
|
||||
D.SET80VID .EQ $C00D
|
||||
D.SETALTCHR .EQ $C00F
|
||||
|
||||
D.PICK CLV
|
||||
|
||||
D.SCREENIT
|
||||
|
||||
PHA
|
||||
STA D.SET80COL ENABLE 80 COL STORE
|
||||
STA D.SET80VID ENABLE 80 COL DISPLAY
|
||||
STA D.SETALTCHR ENABLE LOWER CASE
|
||||
LDA CH
|
||||
LSR CH MOD 2 FOR PAGE SELECT
|
||||
TAY CH/2 FOR INDEX
|
||||
BVS .20 GO STORE
|
||||
* 80 COL PICK
|
||||
PHP
|
||||
SEI
|
||||
LDA D.TXTPAGE2
|
||||
BCC .10
|
||||
LDA D.TXTPAGE1
|
||||
|
||||
.10 LDA (BASEL),Y GET 80 COL CHAR
|
||||
TAY
|
||||
LDA D.TXTPAGE1
|
||||
PLP
|
||||
PLA
|
||||
TYA
|
||||
PHA
|
||||
BVC .30 EXIT ALWAYS
|
||||
* 80 COL STORE
|
||||
|
||||
.20 PLA
|
||||
PHA
|
||||
PHP
|
||||
SEI
|
||||
PHA
|
||||
LDA D.TXTPAGE2
|
||||
BCC .21
|
||||
LDA D.TXTPAGE1
|
||||
|
||||
.21 PLA
|
||||
STA (BASEL),Y PUT 80 COL CHAR
|
||||
LDA D.TXTPAGE1
|
||||
PLP
|
||||
|
||||
* COMMON EXIT
|
||||
|
||||
.30 PLA
|
||||
RTS
|
||||
|
||||
*--------------------------------
|
||||
|
||||
D.MY.CLREOL
|
||||
|
||||
LDY CH
|
||||
|
||||
.1 LDA #$A0 A-REG = BLANK
|
||||
CPY SCREEN.WIDTH
|
||||
BCS .2
|
||||
JSR D.MY.COUT OUTPUT BLANKS UNTIL SCREEN WIDTH
|
||||
LDY CH
|
||||
BNE .1 ...ALWAYS
|
||||
|
||||
.2 RTS
|
||||
|
||||
*--------------------------------
|
||||
|
||||
D.RD.KBD
|
||||
|
||||
JSR D.POSN SETUP CURSOR POSN
|
||||
LDA ESC.FLAG SEE IF EDIT MODE
|
||||
BNE .20 YES IT IS
|
||||
* CURSOR MODE - CURSOR IS INVERSE "+"
|
||||
JSR D.PICK
|
||||
STA D.CHR.UNDER.CURS
|
||||
AND #$80 SAVE INV BIT
|
||||
EOR #$80+'+ FLIP IT FOR + CURSOR
|
||||
BIT D.SEV
|
||||
JSR D.SCREENIT
|
||||
|
||||
.10 LDA $C000
|
||||
BPL .10
|
||||
|
||||
.11 BIT $C010
|
||||
PHA
|
||||
LDA D.CHR.UNDER.CURS
|
||||
BIT D.SEV
|
||||
JSR D.SCREENIT
|
||||
PLA
|
||||
RTS
|
||||
|
||||
* EDIT MODE - CURSOR IS BLINKING CURRENT CHAR
|
||||
* BLINKED WITH SOFTWARE TIMING LOOP.
|
||||
|
||||
.20 JSR D.PICK
|
||||
STA D.CHR.UNDER.CURS
|
||||
|
||||
.21 JSR D.PICK TOGGLE INV FLAG
|
||||
EOR #$80
|
||||
cmp #$40
|
||||
bcc .99
|
||||
cmp #$60
|
||||
bcs .99
|
||||
and #$1F
|
||||
|
||||
.99 BIT D.SEV
|
||||
JSR D.SCREENIT
|
||||
LDY #200 LOOP 200 TIMES BEFORE FLIPPING CHAR
|
||||
|
||||
.22 LDA $C000
|
||||
BMI .11
|
||||
LDA #00
|
||||
|
||||
.23 SEC COUNT 7*256 MICRO SECS
|
||||
SBC #1
|
||||
BNE .23
|
||||
DEY
|
||||
BEQ .21 END LOOP - FLIP CHAR
|
||||
BNE .22 BA CK KEY AGAIN
|
||||
|
||||
*--------------------------------
|
||||
|
||||
D.POSN LDA POSV
|
||||
JSR D.MY.VTAB POSITION VERTICALLY
|
||||
LDA POSH
|
||||
SEC
|
||||
SBC LEFT.MARGIN
|
||||
CLC
|
||||
ADC RM.ADJUST
|
||||
JMP D.MY.HTAB POSITION HORIZONTALLY
|
||||
|
||||
*--------------------------------
|
||||
MAN
|
||||
SAVE usr/src/fse/fse.s.a2e
|
||||
LOAD usr/src/fse/fse.s
|
||||
ASM
|
479
FSE/FSE.S.LINE.txt
Normal file
479
FSE/FSE.S.LINE.txt
Normal file
|
@ -0,0 +1,479 @@
|
|||
NEW
|
||||
AUTO 3,1
|
||||
*--------------------------------
|
||||
GET.KEY JSR READ.KEY.CODE
|
||||
COMP.PTR
|
||||
LDX POSH
|
||||
STX ED.PTR
|
||||
RTS
|
||||
*--------------------------------
|
||||
EDIT.LINE LDA ESC.FLAG IS HE IN EDIT MODE
|
||||
BNE EDIT.ONE.LINE YES, GO EDIT
|
||||
LDA SPECIAL.FLG IS HE POPING INTO EDIT MODE?
|
||||
BEQ .1 NO
|
||||
STA ESC.FLAG YES SET EDIT MODE NOW
|
||||
BNE EDIT.ONE.LINE GO EDIT
|
||||
.1 LDA ONCE.FLG ONE TIME SCROLL FUNCTION
|
||||
STA ESC.FLAG
|
||||
BEQ GET.KEY NO, JUST RETURN KEY
|
||||
EDIT.ONE.LINE
|
||||
LDA #0
|
||||
STA ONCE.FLG CLEAR ONE TIME SCROLL FUNCTION
|
||||
LDA FIRST.LINE COMPUTE
|
||||
STA CTR INIT CTR
|
||||
JSR P1.INIT INIT PTR1 FOR EDIT LINE SEARCH
|
||||
.1 JSR P1.ENDCK END OF PROG?
|
||||
BNE .2 NO
|
||||
JSR E.ESC ERROR CANT EDIT *EOF*
|
||||
LDA #0 CLEAR SPECIAL FLAG
|
||||
STA SPECIAL.FLG
|
||||
BEQ GET.KEY GO GET KEY FOR SCROLL MODE
|
||||
.2 LDA CTR SEE IF FOUND EDIT LINE
|
||||
CMP POSV POSV IS THE EDIT LINE WANTED
|
||||
BEQ E.FOUND FOUND LINE TO EDIT
|
||||
JSR P1.ADD BUMP FORWARD TO THE EDIT LINE
|
||||
INC CTR BUMP POSN CTR
|
||||
BNE .1 ...ALWAYS
|
||||
E.FOUND LDA CTR
|
||||
STA SAV.CTR SAVE EDIT LINE POSN
|
||||
LDA PTR1
|
||||
STA SAV.PTR1 SAVE PTR TO IT
|
||||
LDA PTR1+1
|
||||
STA SAV.PTR1+1
|
||||
LDY #1 SAVE LINE NUMBER
|
||||
LDA (PTR1),Y
|
||||
STA SAV.LNO
|
||||
INY
|
||||
LDA (PTR1),Y
|
||||
STA SAV.LNO+1
|
||||
JSR E.GETLN GET THE LINE INTO WBUF
|
||||
* PTR1 IS PTR TO SOURCE LINE
|
||||
* WBUF HAS LINE EXPANDED
|
||||
.1 JSR E.PROCESS.KEY READ AND PROCESS A KEY
|
||||
BCC .1 NON-EXIT TYPE KEY
|
||||
LDA CHANGE.FLG DID LINE CHANGE
|
||||
BEQ .2 NO
|
||||
LDA #0 YES, CLEAR CHANGE FLAG
|
||||
STA CHANGE.FLG
|
||||
JSR E.SUBMIT.LINE SUBMIT THE LINE
|
||||
.2 LDA ESC.FLAG STILL IN EDIT MODE
|
||||
BEQ EDIT.LINE NO GO GET A KEY FOR SCROLL MODE
|
||||
JSR E.ESC CLEAR EDIT FLAG
|
||||
INC ONCE.FLG SET FLAG TO SAY WE ARE DOING
|
||||
LDA CUR.KEY 1 SCROLL MODE FUNCTION
|
||||
RTS RETURN WITH A REG = FUNCTION CODE
|
||||
*--------------------------------
|
||||
|
||||
; if skmod not installed, don't change case
|
||||
|
||||
E.SHIFT BIT SKMOD.FLG
|
||||
BPL .1
|
||||
LDA ALPHA.FLG
|
||||
EOR #$80 FLIP ALPHA LOCK FLAG
|
||||
STA ALPHA.FLG
|
||||
.1 CLC
|
||||
RTS
|
||||
*--------------------------------
|
||||
READ.KEY.CODE
|
||||
JSR MY.RD.KBD GET KEYBOARD CHAR
|
||||
AND #$7F DROP SIGN BIT
|
||||
PHA
|
||||
LDA ESC.FLAG IS HE IN EDIT MODE?
|
||||
BNE .50 YES, SO ALLOW CASE CHANGE
|
||||
PLA NO, SKIP CASE CHANGE
|
||||
bpl .60 BA
|
||||
.50 PLA
|
||||
BIT ALPHA.FLG LOWER CASE
|
||||
BPL .60 NO, UPPER CASE
|
||||
BIT SKMOD.FLG SHFT KEY MOD?
|
||||
BPL .54 NO, SO DONT LOOK AT IT
|
||||
BIT $C063 IS SHIFT KEY DOWN?
|
||||
BMI .54 NO, FORCE LOWER CASE
|
||||
* FIX PROBLEM SHIFT CHARACTERS THAT MUST BE UPPER CASE
|
||||
CMP #'^ ^ -> N
|
||||
BNE .51
|
||||
LDA #'N
|
||||
.51 CMP #'@ @ -> P
|
||||
BNE .52
|
||||
LDA #'P
|
||||
.52 CMP #'] ] -> M
|
||||
BNE .53
|
||||
LDA #'M
|
||||
.53 BNE .60 OTHERWISE USE UPERCASE VALUE
|
||||
* CK AND CHANGE CASE
|
||||
.54 CMP #'A CHANGE UPPER CASE
|
||||
BCC .60 ALPHA CHARS TO LOWER
|
||||
CMP #'Z+1 CASE.
|
||||
BCS .60
|
||||
ORA #$20
|
||||
* PROCESS OTHER SHIFT KEYS
|
||||
.60 BIT SKMOD.FLG
|
||||
BPL .2 NOT ALLOWED
|
||||
BIT $C063 IS SW ON
|
||||
BMI .2 NOPE
|
||||
CMP #'H-$40 CHANGE <- TO ^"K"
|
||||
BNE .10
|
||||
LDA #'K-$40
|
||||
.10 CMP #'U-$40 CHANGE -> TO ^"J"
|
||||
BNE .11
|
||||
LDA #'J-$40
|
||||
.11 PHA
|
||||
LDA ESC.FLAG IF NOT IN EDIT MODE
|
||||
BNE .1 EDIT MODE, NO CAN DO!
|
||||
PLA
|
||||
CMP #'I CHANGE SHIFT I TO "2"
|
||||
BNE .12
|
||||
LDA #'2
|
||||
.12 CMP #'] CHANGE SHIFT M TO "1"
|
||||
BNE .2
|
||||
LDA #'1
|
||||
PHA
|
||||
.1 PLA
|
||||
.2 STA CUR.KEY
|
||||
RTS
|
||||
*--------------------------------
|
||||
P1.INIT LDA PP.BEG SET PTR1 TO PROG START
|
||||
STA PTR1
|
||||
LDA PP.BEG+1
|
||||
STA PTR1+1
|
||||
RTS
|
||||
*--------------------------------
|
||||
P1.ENDCK LDA PTR1 CK FOR PTR1=END OF PROG
|
||||
CMP PP.END
|
||||
BNE .1
|
||||
LDA PTR1+1
|
||||
CMP PP.END+1
|
||||
.1 RTS
|
||||
*--------------------------------
|
||||
P1.ADD LDY #0 BUMP UP TO NEXT PROG LINE
|
||||
LDA (PTR1),Y
|
||||
CLC
|
||||
ADC PTR1
|
||||
STA PTR1
|
||||
BCC .1
|
||||
INC PTR1+1
|
||||
.1 RTS
|
||||
*--------------------------------
|
||||
|
||||
E.SET.TAB
|
||||
|
||||
TXA
|
||||
SEC
|
||||
SBC #START.COL-1 CONVERT POSH TO TAB VALUES
|
||||
TAX
|
||||
LDY #0
|
||||
.1 CMP TAB.TBL,Y SEARCH TAB TABLE
|
||||
BEQ .10 MATCH EXACTLY MEANS DELETE
|
||||
BCC .20 IF POSH<TAB(I) INSERT BEFORE TAB(I)
|
||||
INY
|
||||
CPY #SZ.TAB.TBL-1
|
||||
BCC .1
|
||||
* APPEND TAB ON END
|
||||
LDA TAB.TBL+SZ.TAB.TBL-1
|
||||
BNE .99 FULL TABLE
|
||||
.2 LDA TAB.TBL,Y LOOK BACKWARDS FOR NON-ZERO ENTRY
|
||||
BNE .3 FOUND IT
|
||||
DEY
|
||||
BPL .2
|
||||
TXA FIRST ENTRY IS ZERO
|
||||
STA TAB.TBL PUT NEW TAB THERE
|
||||
BNE .90
|
||||
.3 TXA PUT INTO NEXT ENTRY
|
||||
STA TAB.TBL+1,Y THAT WAS THE LAST ZERO ENTRY
|
||||
BNE .90 ...ALWAYS
|
||||
* DELETE TAB FROM TABLE
|
||||
.10 LDA TAB.TBL+1,Y GET NEXT ENTRY
|
||||
STA TAB.TBL,Y PUT INTO CUR ENTRY
|
||||
INY
|
||||
CPY #SZ.TAB.TBL-1 SEE IF END OF TABLE
|
||||
BCC .10
|
||||
LDA #0 ZAP LAST ENTRY IN TABLE
|
||||
STA TAB.TBL+SZ.TAB.TBL-1
|
||||
BEQ .90 ...ALWAYS
|
||||
* INSERT TAB IN TABLE
|
||||
.20 PHA SAVE TAB
|
||||
LDA TAB.TBL,Y GET CUR ENTRY
|
||||
TAX SAVE IT
|
||||
PLA GET NEW TAB
|
||||
STA TAB.TBL,Y PLUG IT IN
|
||||
TXA RECOVER SAVED TAB
|
||||
INY
|
||||
CPY #SZ.TAB.TBL-1 DO ANOTHER INSERT
|
||||
BCC .20 IF NOT END OF TABLE
|
||||
BCS .90 ...ALWAYS
|
||||
|
||||
.99 JSR M.BELL
|
||||
|
||||
.90 CLC
|
||||
RTS
|
||||
*--------------------------------
|
||||
E.PROCESS.KEY LDA SPECIAL.FLG CK FOR SPECIAL EDIT KEY
|
||||
BEQ E.PK1 NOT SPECIAL
|
||||
LDA #0 CLEAR SPECIAL
|
||||
STA SPECIAL.FLG EDIT FLAG
|
||||
JSR COMP.PTR copy POSH into ED.PTR using X-reg
|
||||
LDA CUR.KEY GET EDIT KEY
|
||||
JMP E.PK2 'JMP' SINCE ^@ = $00
|
||||
E.PK1 JSR GET.KEY
|
||||
E.PK2 CMP #$20 IS IT CONTROL CHAR
|
||||
BCC E.CNTRL YES
|
||||
STA CHANGE.FLG NO, SET CHANGE FLAG AND TYPE OVER
|
||||
STA WBUF,X CURSOR CHAR
|
||||
JSR E.SHOW.LINE DISPLAY LINE TO SHOW CHANGE
|
||||
LDX ED.PTR GET POSITION
|
||||
E.RIT CPX #254 END OF MAX LINE?
|
||||
BCS E.RIT2 YES
|
||||
JSR MOVE.RT NO, MOVE RIGHT 1 COLUMN
|
||||
E.RIT1 JSR SHOW.ND SHOW SCREEN IF NECESSARY
|
||||
E.RIT2 CLC
|
||||
RTS
|
||||
*--------------------------------
|
||||
E.BKSP JSR MOVE.LF MOVE LEFT TO PROCESS A BACKSPACE
|
||||
JMP E.RIT1 GO SHOW SCREEN IF NEEDED
|
||||
*--------------------------------
|
||||
E.CNTRL LDY #0 SEARCH EDIT MODE FUNCTION TABLE
|
||||
|
||||
.1 CMP E.TBL,Y COMPARE KEY TO TABLE
|
||||
BEQ .2 FOUND KEY
|
||||
INY
|
||||
INY
|
||||
INY
|
||||
CPY #E.TBLSZ
|
||||
BCC .1
|
||||
JSR M.BELL NOT IN TABLE ERROR
|
||||
JMP E.PK1
|
||||
.2 LDA E.TBL+2,Y EXECUTE THE FUNCTION
|
||||
PHA
|
||||
LDA E.TBL+1,Y
|
||||
PHA
|
||||
RTS
|
||||
*--------------------------------
|
||||
E.END LDX #254 SEARCH FROM HERE
|
||||
LDA #$20 BLANK CHAR
|
||||
.1 CMP WBUF,X IS IT BLANK
|
||||
BNE .2 NO FOUND END CHAR
|
||||
DEX
|
||||
CPX #START.COL-1 DONT PASS COLUMN 1
|
||||
BNE .1
|
||||
.2 CPX #254 IF FULL LINE DONT PASS EOL
|
||||
BEQ .3 YES ON EOL
|
||||
INX NEXT CHAR IS END
|
||||
.3 TXA THIS IS POSITION, LOCATE IT IN A WINDOW
|
||||
**** FALL INTO LOC.WNDW ****
|
||||
*--------------------------------
|
||||
LOC.WNDW STA POSH IF LM>=POSH<RM
|
||||
CMP LEFT.MARGIN THEN STAY ON CURRENT WINDOW
|
||||
BCC .0 OTHERWISE HUNT FOR WINDOW
|
||||
CMP RIGHT.MARGIN
|
||||
BCS .0
|
||||
RTS STAY ON WINDOW, RTN CRY CLR
|
||||
.0 LDA #START.COL
|
||||
.1 JSR SET.MARGIN
|
||||
LDA LEFT.MARGIN
|
||||
CLC
|
||||
ADC HORT.PAGE
|
||||
CMP POSH
|
||||
BCS .2 FOUND THE WINDOW
|
||||
CMP RT.FENCEL
|
||||
BCC .1 NOT TOO FAR YET
|
||||
LDA RT.FENCEL THIS IS MAX LEFT MARGIN
|
||||
CMP LEFT.MARGIN UNLESS IT WAS BEFORE
|
||||
BNE .1 NO, TRY NEXT LEFT MARGIN
|
||||
LDA RIGHT.MARGIN BACK POSH TO THE
|
||||
JSR LIMITR RIGHT MARGIN
|
||||
.2 JMP E.RIT1
|
||||
*--------------------------------
|
||||
E.TAB TXA
|
||||
SEC
|
||||
SBC #START.COL-1 CONVERT POSH TO TAB VALUES
|
||||
LDY #0
|
||||
.1 CMP TAB.TBL,Y SEARCH TAB TABLE
|
||||
BCC .2 IF POSH<TAB(I) THEN POSITION TO TAB(I)
|
||||
INY
|
||||
CPY #SZ.TAB.TBL-1
|
||||
BCC .1
|
||||
LDA TAB.TBL USE FIRST TAB IF PAST LAST TAB
|
||||
BNE E.TAB.BUMP WRAP ARROUND TABS!
|
||||
CLC IF NO FIRST TAB, DO NOTHING
|
||||
RTS
|
||||
.2 LDA TAB.TBL,Y GET NEW POSH FROM TAB TABLE
|
||||
E.TAB.BUMP CLC
|
||||
ADC #START.COL-1 CONVERT TO REAL POSITION
|
||||
BNE LOC.WNDW LOCATE IT IN A WINDOW
|
||||
*--------------------------------
|
||||
E.COPY1 LDA ED.PTR
|
||||
SEC
|
||||
SBC #START.COL-1 CONVERT POSH TO TAB VALUE
|
||||
TAX
|
||||
LDY #0
|
||||
.1 CMP TAB.TBL,Y SEARCH TAB TABLE
|
||||
BCC .2 AHA, FOUND POSITION TO COPY TO!
|
||||
INY
|
||||
CPY #SZ.TAB.TBL-1
|
||||
BCC .1
|
||||
LDA #248 COPY TO EOL IF PAST LAST TAB
|
||||
BCS .3 ...ALWAYS
|
||||
.2 LDA TAB.TBL,Y END POINT
|
||||
.3 STA ED.KEY NEW CURSOR POSN
|
||||
.4 LDA WBUF+START.COL-1,X COPY FROM WBUF
|
||||
STA $F00+START.COL-1,X INTO SAVED WBUF
|
||||
INX
|
||||
CPX ED.KEY UNTIL WE REACH THE CURRENT
|
||||
BCC .4 POSITION
|
||||
TXA THIS IS NEW POSN
|
||||
PHA SAVE POSN
|
||||
JSR REST.WBUF RESTORE WBUF
|
||||
JSR E.SHOW.LINE DISPLAY IT
|
||||
PLA GET SAVED POSN
|
||||
STA CHANGE.FLG SET CHANGE FLAG
|
||||
BNE E.TAB.BUMP ...ALWAYS
|
||||
*--------------------------------
|
||||
E.COPY JSR SAVE.WBUF SAVE WBUF DATA
|
||||
LDA POSV
|
||||
SEC
|
||||
SBC FIRST.LINE
|
||||
BNE .1
|
||||
LDY #255 IF ON FIRST LINE THEN PREV LINE=BLANKS
|
||||
JSR FILL.WBUF
|
||||
JMP E.COPY1
|
||||
.1 STA CTR LOCATE AND GET PREV LINE IN WBUF
|
||||
JSR P1.INIT
|
||||
.2 DEC CTR
|
||||
BEQ .3
|
||||
JSR P1.ADD
|
||||
JMP .2
|
||||
.3 LDA #255 SET BLANK FILL POINT
|
||||
STA FILL.TO
|
||||
JSR GET.LINE.IN.WBUF
|
||||
JMP E.COPY1
|
||||
*--------------------------------
|
||||
E.RESTORE
|
||||
LDA SAV.PTR1 RESTORE LINE FROM PROG
|
||||
STA PTR1 THROW AWAY EDIT CHANGES
|
||||
LDA SAV.PTR1+1
|
||||
STA PTR1+1
|
||||
JSR E.GETLN GET CUR LINE
|
||||
JSR E.SHOW.LINE DISPLAY NEW LINE
|
||||
*** FALL INTO E.BEG ***
|
||||
*--------------------------------
|
||||
E.BEG LDA #START.COL SET POSN TO BEGINING OF LINE
|
||||
STA POSH
|
||||
CMP LEFT.MARGIN ARE WE ALREADY ON RIGHT WINDOW?
|
||||
BEQ E.SL YES
|
||||
JSR SET.MARGIN NO SET NEW MARGIN
|
||||
JSR SHOW.ND AND SHOW IT
|
||||
E.SL JSR E.SHOW.LINE SHOW CUR EDIT LINE
|
||||
CLC
|
||||
RTS
|
||||
*--------------------------------
|
||||
E.DEL LDX #1 SET CHANGE FLAG
|
||||
STX CHANGE.FLG
|
||||
LDX ED.PTR GET POSN
|
||||
.1 LDA WBUF,X CK END OF LINE
|
||||
BEQ E.SL YES END
|
||||
LDA WBUF+1,X GET NEXT CHAR
|
||||
BEQ .2 END OF LINE
|
||||
STA WBUF,X PUT OVER PREV CHAR
|
||||
INX NEXT COL SHIFT
|
||||
BNE .1 ..ALWAYS
|
||||
.2 LDA #$20 PUT BLANK AT LAST
|
||||
STA WBUF,X CHAR POSN
|
||||
BNE E.SL ...ALWAYS
|
||||
*--------------------------------
|
||||
E.ZAP LDA #$20 BLANK CHAR
|
||||
STA CHANGE.FLG SET CHANGE FLAG
|
||||
.1 STA WBUF,X BLANK OUT FROM CUR POSN
|
||||
INX TO EOL
|
||||
CPX #255
|
||||
BNE .1 NEXT COLUMN
|
||||
BEQ E.SL ...ALWAYS (GO SHOW LINE)
|
||||
*--------------------------------
|
||||
E.FIND JSR GET.KEY GET KEY TO FIND
|
||||
STA ED.KEY SAVE IT
|
||||
.1 INX NEXT COLUMN
|
||||
CPX #255 END OF WBUF?
|
||||
BEQ .2 YES
|
||||
CMP WBUF,X CK FOR KEY
|
||||
BNE .1 NOT THERE
|
||||
TXA
|
||||
JSR LOC.WNDW GET CORRECT WINDOW
|
||||
JSR GET.KEY GET KEY TO FIND
|
||||
CMP ED.KEY IS IT SAME
|
||||
BEQ .1 NO, TREAT AS EDIT KEY
|
||||
JMP E.PK2
|
||||
.2 JSR M.BELL
|
||||
CLC
|
||||
RTS
|
||||
*--------------------------------
|
||||
E.OVR JSR GET.KEY GET KEY CODE
|
||||
CMP #0 CANT INSERT A CNTRL @
|
||||
BNE E.INS1 ...NOT CNTRL @
|
||||
E.INS JSR GET.KEY GET A KEY
|
||||
CMP #$20 EXIT INSRT ON ANY CONTROL CHAR
|
||||
BCS E.INS1 NOT CONTROL
|
||||
JMP E.CNTRL YES CONTROL
|
||||
E.INS1 LDX #1
|
||||
STX CHANGE.FLG SET CHANGE FLAG
|
||||
LDX ED.PTR GET CUR POSN
|
||||
.1 CPX #254 ARE WE ON EOL?
|
||||
BCS .2 YES
|
||||
PHA SAVE NEW KEY
|
||||
LDA WBUF,X GET CUR CHAR
|
||||
TAY SAVE IT
|
||||
PLA RECOVER NEW KEY
|
||||
STA WBUF,X PUT INTO CUR POSN
|
||||
INX NEXT COLUMN
|
||||
TYA NEW KEY = CUR KEY
|
||||
BNE .1 AGAIN IF NOT EOL
|
||||
.2 STA WBUF,X TYPE OVER IF ON EOL
|
||||
LDA #0
|
||||
STA WBUF+255 MAKE SURE EOL ON END
|
||||
JSR E.SHOW.LINE SHOW LINE
|
||||
JSR MOVE.RT MOVE RIGHT 1 COLUMN
|
||||
JSR SHOW.ND SHOW SCREEN IF NECESSARY
|
||||
JMP E.INS GO DO ANOTHER CHAR INSERT
|
||||
*--------------------------------
|
||||
E.ESC LDA #0 SET SCROLL MODE
|
||||
STA ESC.FLAG
|
||||
E.CTRL SEC
|
||||
RTS
|
||||
*--------------------------------
|
||||
E.GETLN LDA LN.FLAG SAVE OLD LN.FLAG
|
||||
PHA
|
||||
LDA #0
|
||||
STA CHANGE.FLG INIT TO FALSE
|
||||
LDA #255
|
||||
STA FILL.TO COL TO FILL TO
|
||||
LDA #START.COL
|
||||
STA LN.FLAG FORCE LINE NUM IN WBUF
|
||||
JSR GET.LINE.IN.WBUF
|
||||
PLA
|
||||
STA LN.FLAG RESTORE LN.FLAG
|
||||
RTS
|
||||
*--------------------------------
|
||||
SAVE.WBUF LDY #0 SAVE 256 BYTE WBUF
|
||||
.1 LDA WBUF,Y
|
||||
STA $F00,Y
|
||||
INY
|
||||
BNE .1
|
||||
RTS
|
||||
*--------------------------------
|
||||
SHOW.ND LDY #0
|
||||
LDA NO.SHOW.FLAG
|
||||
BEQ .1
|
||||
STY NO.SHOW.FLAG
|
||||
RTS
|
||||
.1 JSR SAVE.WBUF SAVE WBUF SINCE
|
||||
* SHOW.SCREEN USES IT
|
||||
JSR SHOW.SCREEN
|
||||
REST.WBUF LDY #0
|
||||
.1 LDA $F00,Y RECOVER SAVED WBUF
|
||||
STA WBUF,Y
|
||||
INY
|
||||
BNE .1
|
||||
RTS
|
||||
*--------------------------------
|
||||
MAN
|
||||
SAVE usr/src/fse/fse.s.line
|
||||
LOAD usr/src/fse/fse.s
|
||||
ASM
|
151
FSE/FSE.S.STB80.txt
Normal file
151
FSE/FSE.S.STB80.txt
Normal file
|
@ -0,0 +1,151 @@
|
|||
NEW
|
||||
AUTO 3,1
|
||||
*--------------------------------
|
||||
C.TMP1 .EQ VAR.BEG-1
|
||||
C.TMP2 .EQ C.TMP1-1
|
||||
C.TMP3 .EQ C.TMP2-1
|
||||
C.TMP4 .EQ C.TMP3-1
|
||||
.DO C.TMP4<$300
|
||||
*** VARS<$300
|
||||
.FIN
|
||||
*--------------------------------
|
||||
* STANDARD VIDEO JUMP VECTORS
|
||||
* 1. READ KEYBOARD KEY CODE
|
||||
* TURNS ON CURSOR
|
||||
* GETS KEY CODE
|
||||
* TURNS OFF CURSOR
|
||||
* REG-A HAS KEY CODE SIGN BIT ON.
|
||||
* 2. HORIZONTAL TAB
|
||||
* REG-A HAS TAB 0-79
|
||||
* 3. VERTICAL TAB
|
||||
* REG-A HAS TAB 0-23
|
||||
* 4. CLEAR TO END OF LINE
|
||||
* 5. CLEAR TO END OF SCREEN
|
||||
* 6. CHARACTER OUTPUT ROUTINE
|
||||
* REG-A HAS CHAR TO OUTPUT.
|
||||
* MUST NOT SCROLL SCREEN OR
|
||||
* GO TO NEXT LINE WHEN LAST
|
||||
* CHARACTER IS PRINTED ON A LINE.
|
||||
*--------------------------------
|
||||
JMP C.RD.KBD
|
||||
JMP C.MY.HTAB
|
||||
JMP C.MY.VTAB
|
||||
JMP C.MY.CLREOL
|
||||
JMP C.MY.CLREOP
|
||||
JMP C.MY.COUT
|
||||
*--------------------------------
|
||||
C.MY.CLP LDA CTR
|
||||
JSR C.MY.VTAB
|
||||
C.MY.CLREOP JSR C.MY.CLREOL CLEAR TO END OF LINE
|
||||
LDA #0 START COL 0 FOR NEXT LINE
|
||||
JSR C.MY.HTAB
|
||||
INC CTR BUMP TO NEXT LINE
|
||||
LDA CTR
|
||||
CMP LAST.LINE CHK FOR END
|
||||
BCC C.MY.CLP < END
|
||||
BEQ C.MY.CLP = END
|
||||
RTS > END
|
||||
*--------------------------------
|
||||
C.MY.HTAB STA C.STB.COL SET HORIZ. POSN
|
||||
LSR
|
||||
STA CH CH = POSN/2
|
||||
RTS
|
||||
*--------------------------------
|
||||
C.MY.VTAB STA CV SET VERT POSN
|
||||
RTS
|
||||
*--------------------------------
|
||||
C.MY.COUT STY C.TMP1 SAVE Y REG
|
||||
AND #$7F MASK OFF HIGH BIT
|
||||
PHA
|
||||
LDA CV GET VERT POSN
|
||||
CLC
|
||||
ADC C.STB.TOPADR
|
||||
LDY #18
|
||||
STY C.CRTC CRTC = REG 18
|
||||
STA C.CRTC+1 SET LINE POSN
|
||||
LDA C.STB.COL
|
||||
INY
|
||||
STY C.CRTC CRTC = REG 19
|
||||
STA C.CRTC+1 SET COL POSN
|
||||
LDA C.STB.TOPADR
|
||||
LDY #12
|
||||
STY C.CRTC CRTC = REG 12
|
||||
STA C.CRTC+1 SET SCROLL POSN
|
||||
LDY #$1F
|
||||
STY C.CRTC POINT TO DUMMY REG
|
||||
PLA
|
||||
CMP #$20
|
||||
BCS .1 NON CONTROL CHAR
|
||||
ORA #$C0 SET INV BIT, MAKE LETR
|
||||
.1 BIT C.CRTC WAIT FOR RIGHT TIME
|
||||
BPL .1
|
||||
STA C.CRTC+3 PUT CHAR IN LATCH
|
||||
INC C.STB.COL NEXT COLUMN
|
||||
LDY C.TMP1 RESTORE Y REG
|
||||
RTS
|
||||
*--------------------------------
|
||||
C.MY.CLREOL STY C.TMP3 SAVE Y REG
|
||||
STX C.TMP4 SAVE X REG
|
||||
.1 LDY C.STB.COL GET COL POSN
|
||||
CPY SCREEN.WIDTH END OF LINE
|
||||
BCS .2 YES
|
||||
LDA #$A0 A REG = BLANK
|
||||
JSR C.MY.COUT PRINT IT
|
||||
JMP .1 NEXT COLUMN
|
||||
.2 LDY C.TMP3 RESTORE Y REG
|
||||
LDX C.TMP4 RESTORE X REG
|
||||
RTS
|
||||
*--------------------------------
|
||||
* STB80 IO ROUTINES
|
||||
*--------------------------------
|
||||
C.CRTC .EQ $C0B0 CRT CONTROLLER CHIP
|
||||
C.STB.TOPADR .EQ $57B SCROLL LINE START
|
||||
C.STB.COL .EQ $5FB COLUMN POSN
|
||||
*--------------------------------
|
||||
C.RD.KBD JSR C.CURSOR.ON TURN ON CURSOR
|
||||
.1 LDA $C000 WAIT FOR KEY
|
||||
BPL .1
|
||||
BIT $C010 STROBE KBD TO KILL FLAG BIT
|
||||
PHA SAVE CHAR
|
||||
JSR C.CURSOR.OFF TURN OFF CURSOR
|
||||
PLA RESTORE CHAR
|
||||
RTS
|
||||
*--------------------------------
|
||||
C.CURSOR.ON LDA POSV POSITION VERTICALLY
|
||||
JSR C.MY.VTAB
|
||||
LDA POSH
|
||||
SEC
|
||||
SBC LEFT.MARGIN
|
||||
CLC
|
||||
ADC RM.ADJUST
|
||||
JSR C.MY.HTAB POSITION HORIZONTALLY
|
||||
LDA ESC.FLAG TEST ESC MODE
|
||||
BEQ .1 IT IS IN SCROLL MODE
|
||||
LDA #$67 EDIT MODE GETS LITTLE CURSOR
|
||||
BNE .2 ...ALWAYS
|
||||
.1 LDA #$C0 SCROLL MODE GETS NORMAL CURSOR
|
||||
.2 PHA
|
||||
LDA #$0A
|
||||
STA C.CRTC CTRC = REG 10
|
||||
PLA
|
||||
STA C.CRTC+1 SET CURSOR START DATA
|
||||
C.WRIT LDA #$0F
|
||||
STA C.CRTC CTRC = REG 15
|
||||
LDA C.STB.COL
|
||||
STA C.CRTC+1 SET CURSOR COLUMN POSN
|
||||
LDA #$0E
|
||||
STA C.CRTC CRTC = REG 14
|
||||
LDA CV
|
||||
CLC
|
||||
ADC C.STB.TOPADR
|
||||
STA C.CRTC+1 SET CURSOR LINE POSN
|
||||
RTS
|
||||
*--------------------------------
|
||||
C.CURSOR.OFF LDA #24 LINE 24 IS NON DISPLAYABLE
|
||||
JSR C.MY.VTAB TAB TO THERE
|
||||
JMP C.WRIT AND POSN CURSOR THERE
|
||||
*--------------------------------
|
||||
MAN
|
||||
SAVE usr/src/fse/fse.s.stb80
|
||||
LOAD usr/src/fse/fse.s
|
||||
ASM
|
234
FSE/FSE.S.SUBMIT.txt
Normal file
234
FSE/FSE.S.SUBMIT.txt
Normal file
|
@ -0,0 +1,234 @@
|
|||
NEW
|
||||
AUTO 3,1
|
||||
*--------------------------------
|
||||
E.SUBMIT.LINE JSR TRUNCATE TRUNCATE BLANKS FROM END
|
||||
JSR PACK.LINE PACK INTO SC FORMAT
|
||||
JMP INSERT.LINE PUT INTO SOURCE PROG
|
||||
*--------------------------------
|
||||
TRUNCATE LDY #254
|
||||
.1 LDA WBUF,Y KILL ANY TRAILING BLANKS
|
||||
CMP #$20
|
||||
BNE .2
|
||||
LDA #0
|
||||
STA WBUF,Y
|
||||
DEY
|
||||
CPY #4
|
||||
BNE .1
|
||||
.2 RTS
|
||||
*--------------------------------
|
||||
PACK.LINE LDA #0
|
||||
STA RPTCNT
|
||||
STA RPTCHR
|
||||
TAX
|
||||
LDY #START.COL START LOOKING AT LINE HERE
|
||||
.1 LDA WBUF,Y GET A CHAR
|
||||
AND #$7F MASK HIGH BIT OFF
|
||||
BEQ .4 END OF LINE CODE
|
||||
CMP RPTCHR SEE IF=REPEAT CHAR
|
||||
BNE .3 NO
|
||||
.2 INC RPTCNT BUMP REPEAT COUNT
|
||||
INY NEXT CHAR
|
||||
BNE .1 ...ALWAYS
|
||||
.3 JSR PROCESS.REPEAT.COUNT
|
||||
LDA WBUF,Y
|
||||
AND #$7F
|
||||
STA RPTCHR
|
||||
BNE .2 ...ALWAYS
|
||||
.4 JSR PROCESS.REPEAT.COUNT
|
||||
LDA #0
|
||||
STA WBUF,X
|
||||
INX
|
||||
TXA
|
||||
TAY
|
||||
.41 LDA WBUF-1,Y
|
||||
STA WBUF+2,Y
|
||||
DEY
|
||||
BNE .41
|
||||
INX
|
||||
INX
|
||||
INX
|
||||
.5 STX WBUF
|
||||
LDA SAV.LNO
|
||||
STA WBUF+1
|
||||
LDA SAV.LNO+1
|
||||
STA WBUF+2
|
||||
RTS
|
||||
*--------------------------------
|
||||
PROCESS.REPEAT.COUNT
|
||||
LDA RPTCNT ANY REPEAT CHARS
|
||||
BEQ .2 NO
|
||||
LDA RPTCHR GET REPEAT CHAR
|
||||
CMP #$20 WAS IT BLANK?
|
||||
BEQ .4 YES, BLANK IS SPECIAL
|
||||
STA WBUF+2,X NO, STORE CHAR
|
||||
LDA RPTCNT GET COUNT
|
||||
CMP #4 MUST BE 4 OR MORE
|
||||
BCC .3 NOT ENOUGH
|
||||
STA WBUF+1,X STORE COUNT
|
||||
LDA #$C0 STORE REPEAT TOKEN
|
||||
STA WBUF,X
|
||||
INX
|
||||
INX COUNT 3 BYTES
|
||||
.1 LDA #0 ZERO REPEAT COUNT
|
||||
STA RPTCNT
|
||||
INX
|
||||
.2 RTS
|
||||
.3 LDA RPTCHR
|
||||
STA WBUF,X
|
||||
INX
|
||||
DEC RPTCNT
|
||||
BNE .3
|
||||
RTS
|
||||
.4 LDA RPTCNT TAKE BLANK COUNT
|
||||
CMP #$40 CK < 64
|
||||
BCC .5 YES
|
||||
SBC #$3F DECREMENT MAX COUNT
|
||||
STA RPTCNT
|
||||
LDA #$BF OUTPUT MAX COUNT
|
||||
STA WBUF,X IN WBUF
|
||||
INX THEN GO BACK FOR MORE
|
||||
BNE .4 ...ALWAYS
|
||||
.5 ORA #$80 SET HIGH BIT
|
||||
STA WBUF,X STORE BLANK COUNT
|
||||
BNE .1 ...ALWAYS
|
||||
*--------------------------------
|
||||
INSERT.LINE LDA SAV.PTR1
|
||||
STA PTR1
|
||||
STA PTR2
|
||||
LDA SAV.PTR1+1
|
||||
STA PTR1+1
|
||||
STA PTR2+1
|
||||
JSR P1.ADD P1=NEXT, P2=CUR
|
||||
LDA PTR1
|
||||
SEC
|
||||
SBC PTR2
|
||||
SEC
|
||||
SBC WBUF
|
||||
BEQ .11 SAME SIZE
|
||||
STA MDIST
|
||||
LDA #0
|
||||
SBC #0
|
||||
STA MDIST+1
|
||||
BCC .6 LINE IS BIGGER
|
||||
*--------------------------------
|
||||
* LINE IS SMALLER
|
||||
*--------------------------------
|
||||
CLC
|
||||
LDA PTR2
|
||||
ADC MDIST
|
||||
STA A4L
|
||||
LDA PTR2+1
|
||||
ADC MDIST+1
|
||||
STA A4H
|
||||
JSR MOVE.TEXT.UP
|
||||
JMP .11
|
||||
*--------------------------------
|
||||
* LINE IS BIGGER
|
||||
*--------------------------------
|
||||
.6 CLC
|
||||
LDA PP.BEG
|
||||
ADC MDIST
|
||||
STA A4L
|
||||
LDA PP.BEG+1
|
||||
ADC MDIST+1
|
||||
STA A4H
|
||||
LDA A4L
|
||||
CMP SP.END
|
||||
LDA A4H
|
||||
SBC SP.END+1
|
||||
BCC .30 ERROR NO ROOM
|
||||
JSR MOVE.TEXT.DOWN
|
||||
*--------------------------------
|
||||
* MOVE LINE INTO HOLE
|
||||
*--------------------------------
|
||||
.11 LDX WBUF
|
||||
LDY #0
|
||||
.12 LDA PTR1
|
||||
BNE .13
|
||||
DEC PTR1+1
|
||||
.13 DEC PTR1
|
||||
DEX
|
||||
LDA WBUF,X
|
||||
STA (PTR1),Y
|
||||
TXA
|
||||
BNE .12
|
||||
.14 RTS
|
||||
*--------------------------------
|
||||
.30 JMP M.BELL NO ROOM
|
||||
*--------------------------------
|
||||
MOVE.TEXT.UP JSR COMPUTE.BLOCK.SIZE
|
||||
CLC
|
||||
LDA PP.BEG
|
||||
ADC MDIST
|
||||
STA PP.BEG
|
||||
LDA PP.BEG+1
|
||||
ADC MDIST+1
|
||||
STA PP.BEG+1
|
||||
LDY #0
|
||||
BEQ .3 ...ALWAYS
|
||||
* MOVE WHOLE BLOCK
|
||||
.1 LDA (PTR2),Y
|
||||
STA (A4L),Y
|
||||
.2 DEY
|
||||
BNE .1
|
||||
LDA (PTR2),Y
|
||||
STA (A4L),Y
|
||||
.3 DEC PTR2+1
|
||||
DEC A4H
|
||||
DEX ANY MORE BLOCKS
|
||||
BNE .2 YES
|
||||
* MOVE SHORT BLOCK IF ANY
|
||||
LDX BLKSIZ PARTIAL BLOCK SIZE
|
||||
BEQ .5 NONE LEFT
|
||||
.4 DEY
|
||||
LDA (PTR2),Y
|
||||
STA (A4L),Y
|
||||
DEX
|
||||
BNE .4
|
||||
.5 RTS
|
||||
*--------------------------------
|
||||
COMPUTE.BLOCK.SIZE
|
||||
SEC
|
||||
LDA PTR2
|
||||
SBC PP.BEG
|
||||
STA BLKSIZ
|
||||
LDA PTR2+1
|
||||
SBC PP.BEG+1
|
||||
TAX # PAGES
|
||||
INX
|
||||
RTS
|
||||
*--------------------------------
|
||||
MOVE.TEXT.DOWN
|
||||
JSR COMPUTE.BLOCK.SIZE
|
||||
LDA PP.BEG
|
||||
STA A2L
|
||||
LDA PP.BEG+1
|
||||
STA A2H
|
||||
LDA A4L
|
||||
STA PP.BEG
|
||||
LDA A4H
|
||||
STA PP.BEG+1
|
||||
LDY #0
|
||||
BEQ .2 ...ALWAYS
|
||||
.1 LDA (A2L),Y YES, MOVE 256 BYTE
|
||||
STA (A4L),Y
|
||||
INY
|
||||
BNE .1
|
||||
INC A2H NEXT BLOCK
|
||||
INC A4H
|
||||
.2 DEX ANY MORE BLOCKS
|
||||
BNE .1
|
||||
* MOVE PARTIAL BLOCK
|
||||
LDX BLKSIZ
|
||||
BEQ .4 NO PARTIAL BLOCK
|
||||
.3 LDA (A2L),Y
|
||||
STA (A4L),Y
|
||||
INY
|
||||
DEX
|
||||
BNE .3
|
||||
.4 RTS
|
||||
*--------------------------------
|
||||
MAN
|
||||
SAVE usr/src/fse/fse.s.submit
|
||||
LOAD usr/src/fse/fse.s
|
||||
ASM
|
220
FSE/FSE.S.VIDEX.txt
Normal file
220
FSE/FSE.S.VIDEX.txt
Normal file
|
@ -0,0 +1,220 @@
|
|||
NEW
|
||||
AUTO 3,1
|
||||
*--------------------------------
|
||||
B.TMP1 .EQ VAR.BEG-1
|
||||
B.TMP2 .EQ B.TMP1-1
|
||||
B.TMP3 .EQ B.TMP2-1
|
||||
B.TMP4 .EQ B.TMP3-1
|
||||
.DO B.TMP4<$300
|
||||
*** VARS<$300
|
||||
.FIN
|
||||
*--------------------------------
|
||||
* STANDARD VIDEO JUMP VECTORS
|
||||
* 1. READ KEYBOARD KEY CODE
|
||||
* TURNS ON CURSOR
|
||||
* GETS KEY CODE
|
||||
* TURNS OFF CURSOR
|
||||
* REG-A HAS KEY CODE SIGN BIT ON.
|
||||
* 2. HORIZONTAL TAB
|
||||
* REG-A HAS TAB 0-79
|
||||
* 3. VERTICAL TAB
|
||||
* REG-A HAS TAB 0-23
|
||||
* 4. CLEAR TO END OF LINE
|
||||
* 5. CLEAR TO END OF SCREEN
|
||||
* 6. CHARACTER OUTPUT ROUTINE
|
||||
* REG-A HAS CHAR TO OUTPUT.
|
||||
* MUST NOT SCROLL SCREEN OR
|
||||
* GO TO NEXT LINE WHEN LAST
|
||||
* CHARACTER IS PRINTED ON A LINE.
|
||||
*--------------------------------
|
||||
JMP B.RD.KBD
|
||||
JMP B.MY.HTAB
|
||||
JMP B.MY.VTAB
|
||||
JMP B.MY.CLREOL
|
||||
JMP B.MY.CLREOP
|
||||
JMP B.MY.COUT
|
||||
*--------------------------------
|
||||
B.CN .DA #$C3 SLOT + $C0 OF 80 COL BOARD
|
||||
B.N0 .EQ $30 SLOT * 16 OF 80 COL BOARD
|
||||
*--------------------------------
|
||||
B.MY.CLP LDA CTR
|
||||
JSR B.MY.VTAB
|
||||
B.MY.CLREOP JSR B.MY.CLREOL CLEAR TO END OF LINE
|
||||
LDA #0
|
||||
JSR B.MY.HTAB NEXT LINE BEGINS WITH COL 0
|
||||
INC CTR BUMP CTR TO NEXT LINE
|
||||
LDA CTR
|
||||
CMP LAST.LINE IS IT > LANT LINE
|
||||
BCC B.MY.CLP < END
|
||||
BEQ B.MY.CLP = END
|
||||
RTS > END
|
||||
*--------------------------------
|
||||
B.MY.HTAB STX B.TMP1 SAVE X REG
|
||||
LDX B.CN
|
||||
STA B.CHORZ,X SAVE HORIZONTAL POSN
|
||||
LDX B.TMP1 RESTORE X REG
|
||||
RTS
|
||||
*--------------------------------
|
||||
B.MY.VTAB STY B.TMP1 SAVE Y REG
|
||||
STX B.TMP2 SAVE X REG
|
||||
LDX B.CN
|
||||
STA CV SET NEW VERT POSN
|
||||
STA B.CVERT,X SAVE FOR VIDEX TOO
|
||||
JSR B.VTABZ DO CALCULATION
|
||||
LDY B.TMP1 RESTORE Y REG
|
||||
LDX B.TMP2 RESTORE X REG
|
||||
RTS
|
||||
*--------------------------------
|
||||
B.MY.COUT STY B.TMP1 SAVE Y REG
|
||||
STX B.TMP2 SAVE X REG
|
||||
LDX B.CN
|
||||
LDY B.CHORZ,X GET COLUMN POSN
|
||||
JSR B.CHRPUT PUT CHAR ON SCREEN
|
||||
INC B.CHORZ,X NEXT COLUMN
|
||||
LDY B.TMP1 RESTORE Y REG
|
||||
LDX B.TMP2 RESTORE X REG
|
||||
RTS
|
||||
*--------------------------------
|
||||
B.MY.CLREOL STY B.TMP3 SAVE Y REG
|
||||
STX B.TMP4 SAVE X REG
|
||||
LDX B.CN
|
||||
LDY B.CHORZ,X GET COL POSN
|
||||
.1 LDA #$A0 A REG = BLANK
|
||||
CPY SCREEN.WIDTH END OF LINE YET?
|
||||
BCS .2 YES
|
||||
JSR B.MY.COUT NO, PRINT A BLANK
|
||||
LDY B.CHORZ,X GET COL POSN
|
||||
BNE .1 ...ALWAYS
|
||||
.2 LDY B.TMP3 RESTORE Y REG
|
||||
LDX B.TMP4 RESTORE X REG
|
||||
RTS
|
||||
*--------------------------------
|
||||
* VIDEX IO ROUTINES
|
||||
*--------------------------------
|
||||
B.YSAVE .EQ $35 SAVE Y REG
|
||||
*
|
||||
B.ASAV1 .EQ $4F8 SAVE A REG
|
||||
B.XSAV1 .EQ $578 SAVE X REG
|
||||
B.MSLOT .EQ $7F8 SAVE SLOT NUMBER
|
||||
*--------------------------------
|
||||
B.BASEL .EQ $478-$C0 COMPUTED BASE ADRS LOW
|
||||
B.BASEH .EQ $4F8-$C0 COMPUTED BASE ADRS HIGH
|
||||
B.CHORZ .EQ $578-$C0 TRUE HORIZONTAL POSN
|
||||
B.CVERT .EQ $5F8-$C0 TRUE VERTICAL POSN
|
||||
B.START .EQ $6F8-$C0 SCROLL LINE START
|
||||
*--------------------------------
|
||||
B.FLAGS .EQ $7F8-$C0 FLAG BITS FOR VIDEX
|
||||
*--------------------------------
|
||||
B.DEV0 .EQ $C080 REGISTER SELECT
|
||||
B.DEV1 .EQ $C081 REGISTER DATA
|
||||
B.DISP0 .EQ $CC00 1ST PAGE OF BANK
|
||||
B.DISP1 .EQ $CD00 2ND PAGE OF BANK
|
||||
*--------------------------------
|
||||
B.VTABZ STA B.ASAV1 COMPUTE VIDEX BASE ADRS
|
||||
ASL
|
||||
ASL
|
||||
CLC
|
||||
ADC B.ASAV1 A*5 + START
|
||||
ADC B.START,X
|
||||
PHA
|
||||
LSR * $10
|
||||
LSR
|
||||
LSR
|
||||
LSR
|
||||
STA B.BASEH,X
|
||||
PLA
|
||||
ASL
|
||||
ASL
|
||||
ASL
|
||||
ASL
|
||||
STA B.BASEL,X
|
||||
RTS
|
||||
*--------------------------------
|
||||
B.PSNCALC STX B.MSLOT POSITION CALCULATION
|
||||
TYA
|
||||
CLC
|
||||
ADC B.BASEL,X
|
||||
STA B.XSAV1
|
||||
LDA #0
|
||||
ADC B.BASEH,X
|
||||
LSR BIT 0 TO CARRY
|
||||
PHP SAVE CARRY BIT
|
||||
AND #3 BIT 1,2 SPECIFY WHICH BANK
|
||||
ASL
|
||||
ASL
|
||||
ORA #B.N0
|
||||
STY B.YSAVE
|
||||
TAY
|
||||
LDA B.DEV0,Y FLIP IN RIGHT 512 BANK
|
||||
LDY B.YSAVE
|
||||
PLP CARRY SAYS WHICH 256 BYTE PAGE
|
||||
LDX B.XSAV1 TO USE
|
||||
RTS
|
||||
*--------------------------------
|
||||
B.CHRPUT ASL KILL SIGN BIT
|
||||
PHA SAVE CHAR
|
||||
LDA B.FLAGS,X GET CHAR SET FLAG
|
||||
LSR IN CARRY BIT
|
||||
PLA RECOVER CHAR
|
||||
ROR INSERT CHAR SET BIT
|
||||
PHA SAVE CHAR
|
||||
JSR B.PSNCALC COMPUTE POSN
|
||||
PLA GET CHAR
|
||||
BCS .1 HIGH PAGE
|
||||
STA B.DISP0,X LOW PAGE STORE CHAR
|
||||
BCC .2
|
||||
.1 STA B.DISP1,X HIGH PAGE STORE CHAR
|
||||
.2 LDX B.MSLOT
|
||||
RTS
|
||||
*--------------------------------
|
||||
B.RD.KBD JSR B.CURSOR.ON TURN ON CURSOR
|
||||
.1 LDA $C000 GET CHAR
|
||||
BPL .1
|
||||
BIT $C010 STROBE KBD TO KILL FLAG BIT
|
||||
PHA SAVE CHAR
|
||||
JSR B.CURSOR.OFF TURN OFF CURSOR
|
||||
PLA CHAR IN A REG
|
||||
RTS
|
||||
*--------------------------------
|
||||
B.CURSOR.ON LDA POSV POSITION VERTICVALLY
|
||||
JSR B.MY.VTAB
|
||||
LDA POSH
|
||||
SEC
|
||||
SBC LEFT.MARGIN
|
||||
CLC
|
||||
ADC RM.ADJUST
|
||||
JSR B.MY.HTAB POSITION HORIZONTALLY
|
||||
LDY #B.N0
|
||||
LDA ESC.FLAG CHK FOR EDIT OR SCROLL MODE
|
||||
BEQ .1 MUST BE SCROLL MODE.
|
||||
LDA #$67 EDIT MODE GETS LITTLE CURSOR
|
||||
BNE .2
|
||||
.1 LDA #$C0 SCROLL MODE GETS NORMAL CURSOR
|
||||
.2 PHA
|
||||
LDA #$0A
|
||||
STA B.DEV0,Y SET CTRC = REG 10
|
||||
PLA
|
||||
STA B.DEV1,Y SET CURSOR START DATA
|
||||
B.WRIT LDX B.CN
|
||||
LDY #B.N0
|
||||
LDA #$0F
|
||||
STA B.DEV0,Y CTRC = REG 15
|
||||
LDA B.CHORZ,X
|
||||
CLC
|
||||
ADC B.BASEL,X
|
||||
STA B.DEV1,Y SET CURSOR HOIZONTAL POSN
|
||||
LDA #$0E
|
||||
STA B.DEV0,Y CTRC = REG 14
|
||||
LDA #0
|
||||
ADC B.BASEH,X
|
||||
STA B.DEV1,Y SET CURSOR VERTICAL POSN
|
||||
RTS
|
||||
*--------------------------------
|
||||
B.CURSOR.OFF LDA #24 GO TO LINE 24 (DOES NOT EXIST)
|
||||
JSR B.MY.VTAB
|
||||
JMP B.WRIT PUT CURSOR THERE
|
||||
*--------------------------------
|
||||
MAN
|
||||
SAVE usr/src/fse/fse.s.videx
|
||||
LOAD usr/src/fse/fse.s
|
||||
ASM
|
138
FSE/FSE.S.txt
Normal file
138
FSE/FSE.S.txt
Normal file
|
@ -0,0 +1,138 @@
|
|||
NEW
|
||||
AUTO 3,1
|
||||
.LIST OFF
|
||||
.OR $6480
|
||||
.TF FSE
|
||||
*--------------------------------
|
||||
* S-C MACRO ASSEMBLER SCREEN EDITOR
|
||||
*
|
||||
* BY MIKE LAUMER
|
||||
* LAUMER RESEARCH
|
||||
* 1832 SCHOOL RD.
|
||||
* CARROLLTON, TEXAS 75006
|
||||
*
|
||||
* (214) 245-3927
|
||||
*
|
||||
* modified 7/10/85 by:
|
||||
* David C. Johnson of
|
||||
* Applied Engineering
|
||||
* 3216 Beltline Rd, Suite 610
|
||||
* Dallas, TX 75234
|
||||
* (214) 241-6060
|
||||
*
|
||||
* changes include:
|
||||
* operates under SCASM 2.0 - ProDOS
|
||||
* fixing blank lines entered w/^L (see INS.TBL),
|
||||
* changing E.SHIFT to test SKMOD.FLG,
|
||||
* allowing lowercase escape mode characters,
|
||||
* eliminating MouseText characters, and
|
||||
* speeding up the //e driver some.
|
||||
* many small changes too...
|
||||
*--------------------------------
|
||||
* DRIVER SELECTION PARAMETER
|
||||
*
|
||||
* DRVR = 0 .... STANDARD 40 COLUMN
|
||||
* = 1 .... VIDEX 80-COLUMN
|
||||
* = 2 .... STB80 80-COLUMN
|
||||
* = 3 .... //e or //c 80-COLUMN
|
||||
|
||||
DRVR .EQ 3
|
||||
|
||||
.DO DRVR
|
||||
SCR.SIZE .EQ 80 SCREEN WIDTH
|
||||
.EL
|
||||
SCR.SIZE .EQ 40 make screen width 40 automatically
|
||||
.FI
|
||||
*--------------------------------
|
||||
.OR $6480
|
||||
.TF FSE
|
||||
*--------------------------------
|
||||
FSE.VECTOR .EQ $8028
|
||||
ESC.U.VECTOR .EQ $800C
|
||||
|
||||
INSTALLER
|
||||
|
||||
LDA #$4C JMP opcode
|
||||
STA FSE.VECTOR
|
||||
STA ESC.U.VECTOR
|
||||
LDA #HARD
|
||||
STA FSE.VECTOR+1
|
||||
LDA /HARD
|
||||
STA FSE.VECTOR+2
|
||||
STA $BEFB Global Page HIMEM
|
||||
LDA #REMOVER
|
||||
STA ESC.U.VECTOR+1
|
||||
LDA /REMOVER
|
||||
STA ESC.U.VECTOR+2
|
||||
JMP $8000 coldstart assembler
|
||||
.BS $6500-*
|
||||
*--------------------------------
|
||||
|
||||
.INB usr/src/fse/fse.s.1
|
||||
.INB usr/src/fse/fse.s.2
|
||||
.INB usr/src/fse/fse.s.3
|
||||
.INB usr/src/fse/fse.s.line
|
||||
.INB usr/src/fse/fse.s.submit
|
||||
|
||||
*--------------------------------
|
||||
* EACH DRIVER MODULE LOADS HERE.
|
||||
* DRIVER LINKAGE IS VIA A JUMP TABLE
|
||||
* TO STANDARDIZE THEIR ENTRY POINTS.
|
||||
*--------------------------------
|
||||
*
|
||||
OVERLAY.AREA
|
||||
*
|
||||
MY.RD.KBD .EQ OVERLAY.AREA KEYBOARD READ
|
||||
MY.HTAB .EQ OVERLAY.AREA+3 HOTIZONTAL TAB
|
||||
MY.VTAB .EQ OVERLAY.AREA+6 VERTICAL TAB
|
||||
MY.CLREOL .EQ OVERLAY.AREA+9 CLEAR TO END OF LINE
|
||||
MY.CLREOP .EQ OVERLAY.AREA+12 CLEAR TO END OF SCREEN
|
||||
MY.COUT .EQ OVERLAY.AREA+15 CHARACTER OUTPUT
|
||||
|
||||
.DO DRVR=0
|
||||
*--------------------------------
|
||||
* STANDARD 40 COLUMN APPLE VIDEO DRIVER
|
||||
*--------------------------------
|
||||
.INB usr/src/fse/fse.s.a2
|
||||
.FIN
|
||||
|
||||
.DO DRVR=1
|
||||
*--------------------------------
|
||||
* VIDEX 80 COLUMN VIDEO DRIVER
|
||||
*--------------------------------
|
||||
.INB usr/src/fse/fse.s.videx
|
||||
.FIN
|
||||
|
||||
.DO DRVR=2
|
||||
*--------------------------------
|
||||
* STB80 80 COLUMN VIDEO DRIVER
|
||||
*--------------------------------
|
||||
.INB usr/src/fse/fse.s.stb80
|
||||
.FIN
|
||||
|
||||
.DO DRVR=3
|
||||
*--------------------------------
|
||||
* APPLE IIE 80 COLUMN VIDEO DRIVER
|
||||
*--------------------------------
|
||||
.INB usr/src/fse/fse.s.a2e
|
||||
.FIN
|
||||
|
||||
REMOVER
|
||||
|
||||
LDA #$60 RTS opcode
|
||||
STA FSE.VECTOR
|
||||
LDA #M.BELL
|
||||
STA ESC.U.VECTOR+1
|
||||
LDA /M.BELL
|
||||
STA ESC.U.VECTOR+2
|
||||
LDA /$7400
|
||||
STA $BEFB Global Page HIMEM
|
||||
JMP $8000 coldstart assembler
|
||||
*--------------------------------
|
||||
ZZ.END .DO *>$73FF OR EDITOR WILL BE TOO LARGE
|
||||
!!! EXCEEDS $73FF
|
||||
.FIN
|
||||
*--------------------------------
|
||||
MAN
|
||||
SAVE usr/src/fse/fse.s
|
||||
ASM
|
Loading…
Reference in New Issue
Block a user