mirror of https://github.com/GnoConsortium/gno.git
2429 lines
33 KiB
NASM
2429 lines
33 KiB
NASM
* $Id: texttool.asm,v 1.1 1998/02/02 08:19:50 taubert Exp $
|
|
**************************************************************************
|
|
*
|
|
* The GNO Multitasking Environment Project
|
|
*
|
|
* Developed by:
|
|
* Jawaid Bazyar
|
|
* Tim Meekins
|
|
*
|
|
**************************************************************************
|
|
*
|
|
* TEXTTOOL.ASM
|
|
* By Tim Meekins
|
|
* and Jawaid Bazyar
|
|
* GNO replacement for TextTools toolset
|
|
* Supports redirection, pipes, and loadable drivers
|
|
*
|
|
* Copyright 1991, Jawaid Bazyar
|
|
*
|
|
**************************************************************************
|
|
|
|
case on
|
|
mcopy m/texttool.mac
|
|
copy global.equates
|
|
copy ../drivers/console.equates
|
|
|
|
;=========================================================================
|
|
;
|
|
; Text Tool Data
|
|
;
|
|
;=========================================================================
|
|
|
|
IgnoreInfo DATA
|
|
ignSetInDev dc i2'0'
|
|
ignSetInGlo dc i2'0'
|
|
ignSetOutDev dc i2'0'
|
|
ignSetOutGlo dc i2'0'
|
|
ignSetErrDev dc i2'0'
|
|
ignSetErrGlo dc i2'0'
|
|
END
|
|
|
|
TextToolsInfo DATA
|
|
InANDMask dc i2'$FF'
|
|
InORMask dc i2'$80'
|
|
OutANDMask dc i2'$FF'
|
|
OutORMask dc i2'$80'
|
|
ErrANDMask dc i2'$FF'
|
|
ErrORMask dc i2'$80'
|
|
InDeviceType dc i2'1'
|
|
OutDeviceType dc i2'1'
|
|
ErrDeviceType dc i2'1'
|
|
InSlot dc i4'3'
|
|
OutSlot dc i4'3'
|
|
ErrSlot dc i4'3'
|
|
ProcessGroup dc i2'0' ; that's 64 bytes to you and me
|
|
stateFlags dc i2'0' ; info on CR/LF removal, plus ?
|
|
InVect dc i4'0'
|
|
OutVect dc i4'0'
|
|
ErrVect dc i4'0'
|
|
|
|
InCache dc i4'0' ; stderr need not be cached
|
|
OutCache dc i4'0'
|
|
dc 5i2'0'
|
|
ds 64*(NPROC-1) ; space for other processes
|
|
END
|
|
|
|
* Table of Installed TextTools Drivers
|
|
|
|
ReadDDTab DATA
|
|
dc i4'0' ; null device
|
|
dc i4'sl1Read-1' ; [serial 1]
|
|
dc i4'sl2Read-1' ; [serial 2]
|
|
dc i4'0' ; console driver (COUT/KEYIN)
|
|
dc i4'NullIn-1' ;
|
|
dc i4'NullIn-1' ;
|
|
dc i4'NullIn-1' ;
|
|
dc i4'NullIn-1' ;
|
|
END
|
|
WriteDDTab DATA
|
|
dc i4'0' ; null device
|
|
dc i4'sl1Write-1' ; [serial 1]
|
|
dc i4'sl2Write-1' ; [serial 2]
|
|
dc i4'0' ; console driver (COUT/KEYIN)
|
|
dc i4'NullOut-1' ;
|
|
dc i4'NullOut-1' ;
|
|
dc i4'NullOut-1' ;
|
|
dc i4'NullOut-1' ;
|
|
END
|
|
InitDDTab DATA
|
|
dc i4'NullInit-1' ; null device
|
|
dc i4'sl1Init-1' ; [serial 1]
|
|
dc i4'sl2Init-1' ; [serial 2]
|
|
dc i4'C80Init-1' ; console driver (COUT/KEYIN)
|
|
dc i4'NullInit-1' ;
|
|
dc i4'NullInit-1' ;
|
|
dc i4'NullInit-1' ;
|
|
dc i4'NullInit-1' ;
|
|
END
|
|
StatusDDTab DATA
|
|
dc i4'NullStatus-1'
|
|
dc i4'sl1Status-1' ; [serial 1]
|
|
dc i4'sl2Status-1'
|
|
dc i4'NullStatus-1'
|
|
dc i4'NullStatus-1'
|
|
dc i4'NullStatus-1'
|
|
dc i4'NullStatus-1'
|
|
dc i4'NullStatus-1'
|
|
dc i4'NullStatus-1'
|
|
|
|
END
|
|
|
|
NotDone gequ 1 ; NULL entries are copied from old table
|
|
|
|
TTtable DATA
|
|
dc i4'(TheEnd-TTtable)/4'
|
|
|
|
dc i4'NewTextBootInit-1' ; $010C
|
|
dc i4'NewTextStartUp-1' ; $020C
|
|
dc i4'NewTextShutDown-1' ; $030C
|
|
dc i4'NotDone-1' ; $040C
|
|
dc i4'NewTextStartUp-1' ; $050C
|
|
dc i4'NotDone-1' ; $060C
|
|
|
|
dc i4'NotDone-1' ;
|
|
dc i4'NotDone-1' ;
|
|
|
|
dc i4'NewSetInGlob-1' ; $090C SetInGlobals
|
|
dc i4'NewSetOutGlob-1' ; $0A0C SetOutGlobals
|
|
dc i4'NewSetErrGlob-1' ; $0B0C SetErrGlobals
|
|
|
|
dc i4'NewGetInGlob-1' ; $0C0C GetInGlobals
|
|
dc i4'NewGetOutGlob-1' ; $0D0C GetOutGlobals
|
|
dc i4'NewGetErrGlob-1' ; $0E0C GetErrGlobals
|
|
|
|
dc i4'NewSetInDevice-1' ; $0F0C SetInputDevice
|
|
dc i4'NewSetOutDevice-1' ; $100C SetOutputDevice
|
|
dc i4'NewSetErrDevice-1' ; $110C SetErrorDevice
|
|
|
|
dc i4'NewGetInDevice-1' ; $120C GetInputDevice
|
|
dc i4'NewGetOutDevice-1' ; $130C GetOutputDevice
|
|
dc i4'NewGetErrDevice-1' ; $140C GetErrorDevice
|
|
|
|
dc i4'NewInitText-1' ; $150C InitTextDev
|
|
dc i4'NotDone-1' ; $160C CtlTextDev
|
|
dc i4'NewStatusDev-1' ; $170C StatusTextDev
|
|
|
|
dc i4'NewWriteChar-1' ; $180C
|
|
dc i4'NewErrWriteChar-1' ; $190C
|
|
dc i4'NewWriteLine-1' ; $1A0C
|
|
dc i4'NewErrWriteLine-1' ; $1B0C
|
|
dc i4'NewWriteString-1' ; $1C0C
|
|
dc i4'NewErrWriteString-1' ; $1D0C
|
|
dc i4'NewTextWriteBlock-1' ; $1E0C
|
|
dc i4'NewErrWriteBlock-1' ; $1F0C
|
|
dc i4'NewWriteCString-1' ; $200C
|
|
dc i4'NewErrWriteCString-1' ; $210C
|
|
dc i4'NewReadChar-1' ; $220C
|
|
dc i4'NewTextReadBlock-1' ; $230C
|
|
dc i4'NewReadLine-1' ; $240C
|
|
TheEnd anop
|
|
END
|
|
|
|
|
|
;=========================================================================
|
|
;
|
|
; Patch the text tool set
|
|
;
|
|
;=========================================================================
|
|
|
|
PatchText START
|
|
using ReadDDTab
|
|
using WriteDDTab
|
|
|
|
pushlong #0
|
|
pushword #$0000
|
|
pushword #$000C
|
|
_GetTSPtr
|
|
bcc ok
|
|
jmp done
|
|
|
|
ok pulllong >oldTextTT
|
|
|
|
pushword #$0000 ; system tool set
|
|
pushword #$0C ; texttools
|
|
pushlong #TTtable ; thar she blows
|
|
_SetTSPtr
|
|
|
|
movelong #KEYIN-1,ReadDDTab+12
|
|
movelong #COUT-1,WriteDDTab+12
|
|
movelong #NullIn-1,ReadDDTab+0
|
|
movelong #NullOut-1,WriteDDTab+0
|
|
ldx #0 ; null process
|
|
jsr InitGlobals
|
|
|
|
done anop
|
|
rts
|
|
oldTextTT ENTRY
|
|
dc i4'0'
|
|
END
|
|
|
|
;=========================================================================
|
|
;
|
|
; UnPatch the text tool set
|
|
;
|
|
;=========================================================================
|
|
|
|
UnPatchText START
|
|
|
|
pushword #$0000
|
|
pushword #$000C
|
|
pushlong >oldTextTT
|
|
_SetTSPtr
|
|
|
|
rts
|
|
END
|
|
|
|
* We want this to do NOTHING...
|
|
NewTextBootInit START
|
|
lda #0
|
|
clc
|
|
rtl
|
|
END
|
|
|
|
NewTextStartUp START
|
|
using KernelStruct
|
|
* phd
|
|
* phb
|
|
* phk
|
|
* plb
|
|
* lda >truepid
|
|
* xba
|
|
* lsr a
|
|
* lsr a
|
|
* tax
|
|
* jsr InitGlobals
|
|
* plb
|
|
phd
|
|
jmp bye0
|
|
END
|
|
|
|
NewTextShutDown START
|
|
phd
|
|
jmp bye0
|
|
END
|
|
|
|
; FORKInitGlob
|
|
; KERNfork() jsl's this routine. x is source pid, y is destination pid.
|
|
; copies all the TextTools info from parent to child (source to dest)
|
|
|
|
FORKInitGlob START
|
|
using TextToolsInfo
|
|
|
|
phb
|
|
phk
|
|
plb
|
|
|
|
tya
|
|
xba
|
|
lsr a
|
|
lsr a
|
|
tay
|
|
phy
|
|
|
|
txa
|
|
xba
|
|
lsr a
|
|
lsr a
|
|
tax
|
|
lda #32
|
|
sta left
|
|
cpTInfo anop
|
|
lda TextToolsInfo,x
|
|
sta TextToolsInfo,y
|
|
inx
|
|
inx
|
|
iny
|
|
iny
|
|
dec left
|
|
bne cpTInfo
|
|
ply
|
|
lda #0
|
|
sta stateFlags,y
|
|
|
|
plb
|
|
rtl
|
|
left dc i2'0'
|
|
END
|
|
|
|
InitGlobals START
|
|
using TextToolsInfo
|
|
|
|
phx
|
|
pea $00FF
|
|
pea $0000
|
|
_SetInGlobals
|
|
pea $00FF
|
|
pea $0000
|
|
_SetOutGlobals
|
|
pea $00FF
|
|
pea $0000
|
|
_SetErrGlobals
|
|
|
|
pea $0001
|
|
ph4 #3
|
|
_SetInputDevice
|
|
pea $0001
|
|
ph4 #3
|
|
_SetOutputDevice
|
|
pea $0001
|
|
ph4 #3
|
|
_SetErrorDevice
|
|
plx
|
|
|
|
lda #0
|
|
sta stateFlags,x
|
|
rts
|
|
END
|
|
|
|
NewInitText START
|
|
using TextToolsInfo
|
|
using KernelStruct
|
|
using InOutData
|
|
|
|
dev equ 10
|
|
|
|
phd
|
|
lda >InOutDP
|
|
tcd
|
|
|
|
phb
|
|
phk
|
|
plb
|
|
|
|
lda truepid
|
|
xba
|
|
lsr a
|
|
lsr a
|
|
tax
|
|
lda dev,s
|
|
beq doit
|
|
inx
|
|
inx
|
|
cmp #1
|
|
beq doit
|
|
inx
|
|
inx
|
|
doit anop
|
|
lda InDeviceType,x
|
|
cmp #1
|
|
bne nodice
|
|
|
|
lda truepid
|
|
xba
|
|
lsr a
|
|
lsr a
|
|
tax
|
|
lda dev,s
|
|
beq doit2
|
|
inx2
|
|
inx2
|
|
cmp #1
|
|
beq doit2
|
|
inx2
|
|
inx2
|
|
doit2 anop
|
|
lda InSlot,x
|
|
asl a
|
|
asl a
|
|
tax
|
|
|
|
push3 #nodice-1
|
|
short m
|
|
lda InitDDTab+2,x
|
|
pha
|
|
long m
|
|
lda InitDDTab,x
|
|
pha
|
|
rtl
|
|
|
|
nodice plb
|
|
jmp bye2
|
|
END
|
|
|
|
NewStatusDev START
|
|
using TextToolsInfo
|
|
using KernelStruct
|
|
using InOutData
|
|
|
|
dev equ 12
|
|
req equ 10
|
|
|
|
phd
|
|
lda >InOutDP
|
|
tcd
|
|
|
|
phb
|
|
phk
|
|
plb
|
|
|
|
lda truepid
|
|
xba
|
|
lsr a
|
|
lsr a
|
|
tax
|
|
lda dev,s
|
|
beq doit
|
|
inx
|
|
inx
|
|
cmp #1
|
|
beq doit
|
|
inx
|
|
inx
|
|
doit anop
|
|
lda InDeviceType,x
|
|
cmp #1
|
|
bne nodice
|
|
|
|
lda truepid
|
|
xba
|
|
lsr a
|
|
lsr a
|
|
tax
|
|
lda dev,s
|
|
beq doit2
|
|
inx2
|
|
inx2
|
|
cmp #1
|
|
beq doit2
|
|
inx2
|
|
inx2
|
|
doit2 anop
|
|
lda req,s
|
|
tay
|
|
lda InSlot,x
|
|
asl a
|
|
asl a
|
|
tax
|
|
|
|
push3 #retadr-1
|
|
short m
|
|
lda StatusDDTab+2,x
|
|
pha
|
|
long m
|
|
lda StatusDDTab,x
|
|
pha
|
|
tya
|
|
rtl
|
|
retadr ldx #0
|
|
bcs nodice
|
|
ldx #$0C40
|
|
nodice plb
|
|
pld
|
|
ldy #4
|
|
jmp tool_exit
|
|
END
|
|
|
|
NewGetOutDevice START
|
|
using TextToolsInfo
|
|
using KernelStruct
|
|
|
|
phb
|
|
phk
|
|
plb
|
|
|
|
lda >truepid
|
|
xba
|
|
lsr a
|
|
lsr a
|
|
tax
|
|
|
|
lda OutSlot,x
|
|
sta 7+1,s
|
|
lda OutSlot+2,x
|
|
sta 7+1+2,s
|
|
lda OutDeviceType,x
|
|
sta 7+1+4,s
|
|
plb
|
|
phd ;ack!!
|
|
jmp bye0
|
|
|
|
END
|
|
|
|
NewGetInDevice START
|
|
using TextToolsInfo
|
|
using KernelStruct
|
|
|
|
phb
|
|
phk
|
|
plb
|
|
|
|
lda >truepid
|
|
xba
|
|
lsr a
|
|
lsr a
|
|
tax
|
|
|
|
lda InSlot,x
|
|
sta 7+1,s
|
|
lda InSlot+2,x
|
|
sta 7+1+2,s
|
|
lda InDeviceType,x
|
|
sta 7+1+4,s
|
|
plb
|
|
phd ;ack!!
|
|
jmp bye0
|
|
|
|
END
|
|
|
|
NewGetErrDevice START
|
|
using TextToolsInfo
|
|
using KernelStruct
|
|
|
|
phb
|
|
phk
|
|
plb
|
|
|
|
lda >truepid
|
|
xba
|
|
lsr a
|
|
lsr a
|
|
tax
|
|
|
|
lda ErrSlot,x
|
|
sta 7+1,s
|
|
lda ErrSlot+2,x
|
|
sta 7+1+2,s
|
|
lda ErrDeviceType,x
|
|
sta 7+1+4,s
|
|
plb
|
|
phd ;ack!!
|
|
jmp bye0
|
|
|
|
END
|
|
|
|
* Device numbers
|
|
* 0-1: Pascal
|
|
* 2: RAM-based
|
|
* 3: file redirection
|
|
* 4: pipe
|
|
|
|
NewSetOutDevice START
|
|
using IgnoreInfo
|
|
using TextToolsInfo
|
|
using KernelStruct
|
|
|
|
phb
|
|
phk
|
|
plb
|
|
lda ignSetOutDev
|
|
beq noign
|
|
stz ignSetOutDev
|
|
bra outta
|
|
noign anop
|
|
|
|
lda >truepid
|
|
xba
|
|
lsr a
|
|
lsr a
|
|
tax
|
|
|
|
lda 7+1,s
|
|
sta OutSlot,x
|
|
lda 7+1+2,s
|
|
sta OutSlot+2,x
|
|
lda 7+1+4,s
|
|
sta OutDeviceType,x
|
|
cmp #2
|
|
bcc setPascal
|
|
beq setRAM
|
|
cmp #3
|
|
beq setFile
|
|
lda #pipeOUT-1
|
|
sta OutVect,x
|
|
lda #^pipeOUT-1
|
|
sta OutVect+2,x
|
|
bra outta
|
|
setFile anop
|
|
lda #fileOUT-1
|
|
sta OutVect,x
|
|
lda #^fileOUT-1
|
|
sta OutVect+2,x
|
|
bra outta
|
|
setPascal lda OutSlot,x
|
|
asl a
|
|
asl a
|
|
tay
|
|
lda WriteDDTab,y
|
|
sta OutVect,x
|
|
lda WriteDDTab+2,y
|
|
sta OutVect+2,x
|
|
bra outta
|
|
setRAM lda OutSlot,x
|
|
clc
|
|
adc #5
|
|
sta OutVect,x
|
|
lda OutSlot+2,x
|
|
adc #0
|
|
sta OutVect+2,x
|
|
outta plb
|
|
phd ;ack!!
|
|
jmp bye6
|
|
|
|
END
|
|
|
|
NewSetInDevice START
|
|
using IgnoreInfo
|
|
using TextToolsInfo
|
|
using KernelStruct
|
|
|
|
phb
|
|
phk
|
|
plb
|
|
|
|
lda ignSetInDev
|
|
beq noign
|
|
stz ignSetInDev
|
|
bra outta
|
|
noign anop
|
|
lda >truepid
|
|
xba
|
|
lsr a
|
|
lsr a
|
|
tax
|
|
|
|
lda 7+1,s
|
|
sta InSlot,x
|
|
lda 7+1+2,s
|
|
sta InSlot+2,x
|
|
lda 7+1+4,s
|
|
sta InDeviceType,x
|
|
cmp #2
|
|
bcc setPascal
|
|
beq setRAM
|
|
cmp #3
|
|
beq setFile
|
|
brk $00
|
|
|
|
* lda #pipeIN-1
|
|
* sta InVect,x
|
|
* lda #^pipeIN-1
|
|
* sta InVect+2,x
|
|
* bra outta
|
|
setFile anop
|
|
lda #fileIN-1
|
|
sta InVect,x
|
|
lda #^fileIN-1
|
|
sta InVect+2,x
|
|
bra outta
|
|
setPascal lda InSlot,x
|
|
asl a
|
|
asl a
|
|
tay
|
|
lda ReadDDTab,y
|
|
sta InVect,x
|
|
lda ReadDDTab+2,y
|
|
sta InVect+2,x
|
|
bra outta
|
|
setRAM lda InSlot,x
|
|
clc
|
|
adc #2
|
|
sta InVect,x
|
|
lda InSlot+2,x
|
|
adc #0
|
|
sta InVect+2,x
|
|
outta plb
|
|
phd ;ack!!
|
|
jmp bye6
|
|
|
|
END
|
|
|
|
NewSetErrDevice START
|
|
using TextToolsInfo
|
|
using KernelStruct
|
|
|
|
phb
|
|
phk
|
|
plb
|
|
|
|
lda >truepid
|
|
xba
|
|
lsr a
|
|
lsr a
|
|
tax
|
|
|
|
lda 7+1,s
|
|
sta ErrSlot,x
|
|
lda 7+1+2,s
|
|
sta ErrSlot+2,x
|
|
lda 7+1+4,s
|
|
sta ErrDeviceType,x
|
|
cmp #2
|
|
bcc setPascal
|
|
beq setRAM
|
|
lda #fileERR-1
|
|
sta ErrVect,x
|
|
lda #^fileERR-1
|
|
sta ErrVect+2,x
|
|
bra outta
|
|
setPascal lda ErrSlot,x
|
|
asl a
|
|
asl a
|
|
tay
|
|
lda WriteDDTab,y
|
|
sta ErrVect,x
|
|
lda WriteDDTab+2,y
|
|
sta ErrVect+2,x
|
|
bra outta
|
|
setRAM lda ErrSlot,x
|
|
clc
|
|
adc #5
|
|
sta ErrVect,x
|
|
lda ErrSlot+2,x
|
|
adc #0
|
|
sta ErrVect+2,x
|
|
|
|
outta plb
|
|
phd ;ack!!
|
|
jmp bye6
|
|
|
|
END
|
|
|
|
;=========================================================================
|
|
;
|
|
; _SetInGlobals
|
|
;
|
|
;=========================================================================
|
|
|
|
NewSetInGlob START
|
|
using IgnoreInfo
|
|
using TextToolsInfo
|
|
using KernelStruct
|
|
|
|
phb
|
|
phk
|
|
plb
|
|
|
|
lda ignSetInGlo
|
|
beq noign
|
|
stz ignSetInGlo
|
|
bra outta
|
|
noign anop
|
|
lda >truepid
|
|
xba
|
|
lsr a
|
|
lsr a
|
|
|
|
tax
|
|
|
|
lda 7+1,s
|
|
sta InORMask,x
|
|
lda 7+1+2,s
|
|
sta InANDMask,x
|
|
|
|
outta plb
|
|
phd ;ack!!
|
|
jmp bye4
|
|
|
|
END
|
|
|
|
NewSetOutGlob START
|
|
using IgnoreInfo
|
|
using TextToolsInfo
|
|
using KernelStruct
|
|
|
|
phb
|
|
phk
|
|
plb
|
|
|
|
lda ignSetOutGlo
|
|
beq noign
|
|
stz ignSetOutGlo
|
|
bra outta
|
|
noign anop
|
|
lda >truepid
|
|
xba
|
|
lsr a
|
|
lsr a
|
|
tax
|
|
|
|
lda 7+1,s
|
|
sta OutORMask,x
|
|
lda 7+1+2,s
|
|
sta OutANDMask,x
|
|
outta plb
|
|
phd ;ack!!
|
|
jmp bye4
|
|
|
|
END
|
|
|
|
NewSetErrGlob START
|
|
using TextToolsInfo
|
|
using KernelStruct
|
|
|
|
phb
|
|
phk
|
|
plb
|
|
|
|
lda >truepid
|
|
xba
|
|
lsr a
|
|
lsr a
|
|
tax
|
|
|
|
lda 7+1,s
|
|
sta ErrORMask,x
|
|
lda 7+1+2,s
|
|
sta ErrANDMask,x
|
|
plb
|
|
phd ;ack!!
|
|
jmp bye4
|
|
|
|
END
|
|
|
|
NewGetInGlob START
|
|
using TextToolsInfo
|
|
using KernelStruct
|
|
|
|
phb
|
|
phk
|
|
plb
|
|
|
|
lda >truepid
|
|
xba
|
|
lsr a
|
|
lsr a
|
|
tax
|
|
|
|
lda InORMask,x
|
|
sta 7+1,s
|
|
lda InANDMask,x
|
|
sta 7+1+2,s
|
|
plb
|
|
phd ;ack!!
|
|
jmp bye0
|
|
|
|
END
|
|
|
|
NewGetOutGlob START
|
|
using TextToolsInfo
|
|
using KernelStruct
|
|
|
|
phb
|
|
phk
|
|
plb
|
|
|
|
lda >truepid
|
|
xba
|
|
lsr a
|
|
lsr a
|
|
tax
|
|
|
|
lda OutORMask,x
|
|
sta 7+1,s
|
|
lda OutANDMask,x
|
|
sta 7+1+2,s
|
|
plb
|
|
phd ;ack!!
|
|
jmp bye0
|
|
|
|
END
|
|
|
|
NewGetErrGlob START
|
|
using KernelStruct
|
|
using TextToolsInfo
|
|
|
|
phb
|
|
phk
|
|
plb
|
|
|
|
lda >truepid
|
|
xba
|
|
lsr a
|
|
lsr a
|
|
tax
|
|
|
|
lda ErrORMask,x
|
|
sta 7+1,s
|
|
lda ErrANDMask,x
|
|
sta 7+1+2,s
|
|
plb
|
|
phd ;ack!!
|
|
jmp bye0
|
|
|
|
END
|
|
|
|
;=========================================================================
|
|
;
|
|
; _WriteChar
|
|
;
|
|
;=========================================================================
|
|
|
|
NewWriteChar START
|
|
using TextToolsInfo
|
|
using KernelStruct
|
|
using InOutData
|
|
|
|
jsl decBusy
|
|
phd
|
|
lda >InOutDP
|
|
tcd
|
|
|
|
phb
|
|
phk
|
|
plb
|
|
|
|
lda >truepid
|
|
xba
|
|
lsr a
|
|
lsr a
|
|
tax
|
|
|
|
lda 7+2+1,s
|
|
and OutANDMask,x
|
|
ora OutORMask,x
|
|
jsl VectOut
|
|
jsl incBusy
|
|
plb
|
|
jmp bye2
|
|
END
|
|
|
|
;=========================================================================
|
|
;
|
|
; _ErrWriteChar
|
|
;
|
|
;=========================================================================
|
|
|
|
NewErrWriteChar START
|
|
using KernelStruct
|
|
using TextToolsInfo
|
|
using InOutData
|
|
|
|
jsl decBusy
|
|
phd
|
|
lda >InOutDP
|
|
tcd
|
|
|
|
phb
|
|
phk
|
|
plb
|
|
|
|
lda >truepid
|
|
xba
|
|
lsr a
|
|
lsr a
|
|
tax
|
|
|
|
lda 7+2+1,s
|
|
and ErrANDMask,x
|
|
ora ErrORMask,x
|
|
jsl VectErr
|
|
jsl incBusy
|
|
plb
|
|
jmp bye2
|
|
END
|
|
|
|
;=========================================================================
|
|
;
|
|
; WriteLine
|
|
;
|
|
;=========================================================================
|
|
|
|
NewWriteLine START
|
|
using KernelStruct
|
|
using TextToolsInfo
|
|
using InOutData
|
|
|
|
index equ 9
|
|
count equ 7
|
|
dp equ 5
|
|
andmask equ 3
|
|
ormask equ 1
|
|
sixrtl equ 14
|
|
strPtr equ 20
|
|
|
|
jsl decBusy
|
|
phd
|
|
phb
|
|
phk
|
|
plb
|
|
pea 1
|
|
pha
|
|
lda >InOutDP
|
|
pha
|
|
pha
|
|
pha
|
|
tsc
|
|
tcd
|
|
lda [strPtr]
|
|
and #$00FF
|
|
sta count
|
|
lda truepid
|
|
xba
|
|
lsr a
|
|
lsr a
|
|
tax
|
|
lda OutANDMask,x
|
|
sta andmask
|
|
lda OutORMask,x
|
|
sta ormask
|
|
lda count
|
|
beq done
|
|
lp ldy index
|
|
lda [strPtr],y
|
|
and #$00FF
|
|
and andmask
|
|
ora ormask
|
|
phd
|
|
pei (dp)
|
|
pld
|
|
jsl VectOut
|
|
pld
|
|
ldy index
|
|
cpy count
|
|
beq done
|
|
inc index
|
|
bra lp
|
|
|
|
done phd
|
|
pei (dp)
|
|
pld
|
|
lda #13
|
|
jsl VectOut
|
|
lda #10
|
|
jsl VectOut
|
|
pld
|
|
jsl incBusy
|
|
pla
|
|
pla
|
|
pla
|
|
pla
|
|
pla
|
|
plb
|
|
jmp bye4
|
|
END
|
|
|
|
;=========================================================================
|
|
;
|
|
; _ErrWriteLine
|
|
;
|
|
;=========================================================================
|
|
|
|
NewErrWriteLine START
|
|
using KernelStruct
|
|
using TextToolsInfo
|
|
using InOutData
|
|
|
|
index equ 9
|
|
count equ 7
|
|
dp equ 5
|
|
andmask equ 3
|
|
ormask equ 1
|
|
sixrtl equ 14
|
|
strPtr equ 20
|
|
|
|
jsl decBusy
|
|
phd
|
|
phb
|
|
phk
|
|
plb
|
|
pea 1
|
|
pha
|
|
lda >InOutDP
|
|
pha
|
|
pha
|
|
pha
|
|
tsc
|
|
tcd
|
|
lda [strPtr]
|
|
and #$00FF
|
|
sta count
|
|
lda truepid
|
|
xba
|
|
lsr a
|
|
lsr a
|
|
tax
|
|
lda OutANDMask,x
|
|
sta andmask
|
|
lda OutORMask,x
|
|
sta ormask
|
|
lda count
|
|
beq done
|
|
|
|
lp ldy index
|
|
lda [strPtr],y
|
|
and #$00FF
|
|
and andmask
|
|
ora ormask
|
|
phd
|
|
pei (dp)
|
|
pld
|
|
jsl VectErr
|
|
pld
|
|
ldy index
|
|
cpy count
|
|
beq done
|
|
inc index
|
|
bra lp
|
|
|
|
done phd
|
|
pei (dp)
|
|
pld
|
|
lda #13
|
|
jsl VectErr
|
|
lda #10
|
|
jsl VectErr
|
|
pld
|
|
jsl incBusy
|
|
pla
|
|
pla
|
|
pla
|
|
pla
|
|
pla
|
|
plb
|
|
|
|
jmp bye4
|
|
END
|
|
|
|
;=========================================================================
|
|
;
|
|
; _WriteString
|
|
;
|
|
;=========================================================================
|
|
|
|
NewWriteString START
|
|
using KernelStruct
|
|
using TextToolsInfo
|
|
using InOutData
|
|
|
|
index equ 9
|
|
count equ 7
|
|
dp equ 5
|
|
andmask equ 3
|
|
ormask equ 1
|
|
sixrtl equ 14
|
|
strPtr equ 20
|
|
|
|
jsl decBusy
|
|
phd
|
|
phb
|
|
phk
|
|
plb
|
|
pea 1
|
|
pha
|
|
lda >InOutDP
|
|
pha
|
|
pha
|
|
pha
|
|
tsc
|
|
tcd
|
|
lda [strPtr]
|
|
and #$00FF
|
|
sta count
|
|
lda truepid
|
|
xba
|
|
lsr a
|
|
lsr a
|
|
tax
|
|
lda OutANDMask,x
|
|
sta andmask
|
|
lda OutORMask,x
|
|
sta ormask
|
|
lda count
|
|
beq done
|
|
|
|
lp ldy index
|
|
lda [strPtr],y
|
|
and #$00FF
|
|
and andmask
|
|
ora ormask
|
|
phd
|
|
pei (dp)
|
|
pld
|
|
jsl VectOut
|
|
pld
|
|
ldy index
|
|
cpy count
|
|
beq done
|
|
inc index
|
|
bra lp
|
|
|
|
done anop
|
|
jsl incBusy
|
|
pla
|
|
pla
|
|
pla
|
|
pla
|
|
pla
|
|
plb
|
|
jmp bye4
|
|
END
|
|
|
|
;=========================================================================
|
|
;
|
|
; _ErrWriteString
|
|
;
|
|
;=========================================================================
|
|
|
|
NewErrWriteString START
|
|
using KernelStruct
|
|
using TextToolsInfo
|
|
using InOutData
|
|
|
|
index equ 9
|
|
count equ 7
|
|
dp equ 5
|
|
andmask equ 3
|
|
ormask equ 1
|
|
sixrtl equ 14
|
|
strPtr equ 20
|
|
|
|
jsl decBusy
|
|
phd
|
|
phb
|
|
phk
|
|
plb
|
|
pea 1
|
|
pha
|
|
lda >InOutDP
|
|
pha
|
|
pha
|
|
pha
|
|
tsc
|
|
tcd
|
|
lda [strPtr]
|
|
and #$00FF
|
|
sta count
|
|
lda truepid
|
|
xba
|
|
lsr a
|
|
lsr a
|
|
tax
|
|
lda OutANDMask,x
|
|
sta andmask
|
|
lda OutORMask,x
|
|
sta ormask
|
|
lda count
|
|
beq done
|
|
|
|
lp ldy index
|
|
lda [strPtr],y
|
|
and #$00FF
|
|
and andmask
|
|
ora ormask
|
|
phd
|
|
pei (dp)
|
|
pld
|
|
jsl VectErr
|
|
pld
|
|
ldy index
|
|
cpy count
|
|
beq done
|
|
inc index
|
|
bra lp
|
|
|
|
done anop
|
|
jsl incBusy
|
|
pla
|
|
pla
|
|
pla
|
|
pla
|
|
pla
|
|
plb
|
|
|
|
jmp bye4
|
|
END
|
|
|
|
;=========================================================================
|
|
;
|
|
; _WriteCString
|
|
;
|
|
;=========================================================================
|
|
|
|
NewWriteCString START
|
|
using KernelStruct
|
|
using TextToolsInfo
|
|
using InOutData
|
|
|
|
index equ 9
|
|
count equ 7
|
|
dp equ 5
|
|
andmask equ 3
|
|
ormask equ 1
|
|
sixrtl equ 14
|
|
strPtr equ 20
|
|
|
|
jsl decBusy
|
|
phd
|
|
phb
|
|
phk
|
|
plb
|
|
pea 0
|
|
pha
|
|
lda >InOutDP
|
|
pha
|
|
pha
|
|
pha
|
|
tsc
|
|
tcd
|
|
|
|
lda truepid
|
|
xba
|
|
lsr a
|
|
lsr a
|
|
tax
|
|
|
|
lda OutANDMask,x
|
|
sta andmask
|
|
lda OutORMask,x
|
|
sta ormask
|
|
|
|
lp ldy index
|
|
lda [strPtr],y
|
|
and #$00FF
|
|
cmp #0
|
|
beq done
|
|
and andmask
|
|
ora ormask
|
|
phd
|
|
pei (dp)
|
|
pld
|
|
jsl VectOut
|
|
pld
|
|
inc index
|
|
bra lp
|
|
|
|
done anop
|
|
jsl incBusy
|
|
pla
|
|
pla
|
|
pla
|
|
pla
|
|
pla
|
|
plb
|
|
|
|
jmp bye4
|
|
END
|
|
|
|
;=========================================================================
|
|
;
|
|
; _ErrWriteCString
|
|
;
|
|
;=========================================================================
|
|
|
|
NewErrWriteCString START
|
|
using KernelStruct
|
|
using TextToolsInfo
|
|
using InOutData
|
|
|
|
index equ 9
|
|
count equ 7
|
|
dp equ 5
|
|
andmask equ 3
|
|
ormask equ 1
|
|
sixrtl equ 14
|
|
strPtr equ 20
|
|
|
|
jsl decBusy
|
|
phd
|
|
phb
|
|
phk
|
|
plb
|
|
pea 0
|
|
pha
|
|
lda >InOutDP
|
|
pha
|
|
pha
|
|
pha
|
|
tsc
|
|
tcd
|
|
|
|
lda truepid
|
|
xba
|
|
lsr a
|
|
lsr a
|
|
tax
|
|
|
|
lda OutANDMask,x
|
|
sta andmask
|
|
lda OutORMask,x
|
|
sta ormask
|
|
|
|
lp ldy index
|
|
lda [strPtr],y
|
|
and #$00FF
|
|
cmp #0
|
|
beq done
|
|
and andmask
|
|
ora ormask
|
|
phd
|
|
pei (dp)
|
|
pld
|
|
jsl VectErr
|
|
pld
|
|
inc index
|
|
bra lp
|
|
|
|
done anop
|
|
jsl incBusy
|
|
pla
|
|
pla
|
|
pla
|
|
pla
|
|
pla
|
|
plb
|
|
|
|
jmp bye4
|
|
|
|
END
|
|
|
|
;=========================================================================
|
|
;
|
|
; _TextWriteBlock
|
|
;
|
|
;=========================================================================
|
|
|
|
NewTextWriteBlock START
|
|
using KernelStruct
|
|
using TextToolsInfo
|
|
using InOutData
|
|
|
|
dp equ 5
|
|
andmask equ 3
|
|
ormask equ 1
|
|
sixrtl equ 10
|
|
strPtr equ 20
|
|
index equ 18
|
|
count equ 16
|
|
|
|
jsl decBusy
|
|
phd ; 8,s
|
|
phb ; 7,s
|
|
phk
|
|
plb
|
|
lda >InOutDP
|
|
pha ; 5,s (dp)
|
|
pha ; 3,s (andmask)
|
|
pha ; 1,s (ormask)
|
|
tsc
|
|
tcd
|
|
|
|
lda truepid
|
|
xba
|
|
lsr a
|
|
lsr a
|
|
tax
|
|
lda OutANDMask,x
|
|
sta andmask
|
|
lda OutORMask,x
|
|
sta ormask
|
|
lda count
|
|
beq done
|
|
|
|
lp ldy index
|
|
lda [strPtr],y
|
|
and #$00FF
|
|
and andmask
|
|
ora ormask
|
|
phd
|
|
pei (dp)
|
|
pld
|
|
jsl VectOut
|
|
pld
|
|
dec count
|
|
beq done
|
|
inc index
|
|
bra lp
|
|
|
|
done anop
|
|
jsl incBusy
|
|
pla
|
|
pla
|
|
pla
|
|
plb
|
|
jmp bye8
|
|
END
|
|
|
|
;=========================================================================
|
|
;
|
|
; _ErrWriteBlock
|
|
;
|
|
;=========================================================================
|
|
|
|
NewErrWriteBlock START
|
|
using KernelStruct
|
|
using TextToolsInfo
|
|
using InOutData
|
|
|
|
dp equ 5
|
|
andmask equ 3
|
|
ormask equ 1
|
|
sixrtl equ 10
|
|
strPtr equ 20
|
|
index equ 18
|
|
count equ 16
|
|
|
|
jsl decBusy
|
|
phd ; 8,s
|
|
phb ; 7,s
|
|
phk
|
|
plb
|
|
lda >InOutDP
|
|
pha ; 5,s (dp)
|
|
pha ; 3,s (andmask)
|
|
pha ; 1,s (ormask)
|
|
tsc
|
|
tcd
|
|
|
|
lda truepid
|
|
xba
|
|
lsr a
|
|
lsr a
|
|
tax
|
|
lda OutANDMask,x
|
|
sta andmask
|
|
lda OutORMask,x
|
|
sta ormask
|
|
lda count
|
|
beq done
|
|
|
|
lp ldy index
|
|
lda [strPtr],y
|
|
and #$00FF
|
|
and andmask
|
|
ora ormask
|
|
phd
|
|
pei (dp)
|
|
pld
|
|
jsl VectErr
|
|
pld
|
|
dec count
|
|
beq done
|
|
inc index
|
|
bra lp
|
|
|
|
done anop
|
|
jsl incBusy
|
|
pla
|
|
pla
|
|
pla
|
|
plb
|
|
jmp bye8
|
|
END
|
|
|
|
;=========================================================================
|
|
;
|
|
; _ReadChar
|
|
;
|
|
;=========================================================================
|
|
|
|
NewReadChar START
|
|
using KernelStruct
|
|
using TextToolsInfo
|
|
using InOutData
|
|
|
|
jsl decBusy
|
|
|
|
phd ; where does this go?
|
|
lda >InOutDP
|
|
tcd
|
|
|
|
phb
|
|
phk
|
|
plb
|
|
|
|
dobgcheck lda truepid
|
|
xba
|
|
lsr a
|
|
lsr a
|
|
tax
|
|
lda InDeviceType,x
|
|
cmp #1
|
|
bne isfg
|
|
lda InSlot,x
|
|
tax
|
|
lda #21
|
|
jsl BGCheck
|
|
cmp #0
|
|
beq isfg
|
|
cmp #1
|
|
beq dobgcheck ; we were suspended, try again
|
|
|
|
jsl incBusy ; the return code was -1, which means
|
|
plb ; to abort this call with an error
|
|
ldx #$0027 ; code.
|
|
pld
|
|
ldy #2
|
|
jmp >tool_exit
|
|
|
|
isfg anop
|
|
|
|
jsl VectIn
|
|
pha
|
|
lda >truepid
|
|
xba
|
|
lsr a
|
|
lsr a
|
|
tax
|
|
pla
|
|
and InANDMask,x
|
|
ora InORMask,x
|
|
sta 7+2+1+2,s
|
|
|
|
lda 7+2+1,s
|
|
and #%1
|
|
beq done
|
|
lda 7+2+1+2,s ;Echo the character
|
|
and OutANDMask,x
|
|
ora OutORMask,x
|
|
jsl VectOut
|
|
|
|
done anop
|
|
jsl incBusy
|
|
plb
|
|
jmp bye2
|
|
|
|
END
|
|
|
|
;=========================================================================
|
|
;
|
|
; _TextReadBlock
|
|
;
|
|
;=========================================================================
|
|
|
|
NewTextReadBlock START
|
|
using KernelStruct
|
|
using TextToolsInfo
|
|
|
|
jsl decBusy
|
|
phd
|
|
tsc
|
|
tcd
|
|
phb
|
|
phk
|
|
plb
|
|
|
|
dobgcheck lda truepid
|
|
xba
|
|
lsr a
|
|
lsr a
|
|
tax
|
|
lda InDeviceType,x
|
|
cmp #1
|
|
bne isfg
|
|
lda InSlot,x
|
|
tax
|
|
lda #21
|
|
jsl BGCheck
|
|
cmp #0
|
|
beq isfg
|
|
cmp #1
|
|
beq dobgcheck ; we were suspended, try again
|
|
|
|
jsl incBusy ; the return code was -1, which means
|
|
* ; to abort this call with an error
|
|
plb
|
|
ldx #$0027 ; code.
|
|
pld
|
|
ldy #10
|
|
jmp >tool_exit
|
|
|
|
isfg anop
|
|
loop anop
|
|
jsl VectIn
|
|
pha
|
|
lda >truepid
|
|
xba
|
|
lsr a
|
|
lsr a
|
|
tax
|
|
lda 1,s
|
|
and InANDMask,x
|
|
ora InORMask,x
|
|
ldy 7+2+4
|
|
short a
|
|
sta [7+2+6],y
|
|
long a
|
|
|
|
lda 7+2+0
|
|
and #%1
|
|
beq noecho
|
|
lda 1,s ;Echo the character
|
|
and OutANDMask,x
|
|
ora OutORMask,x
|
|
jsl VectOut
|
|
|
|
noecho pla
|
|
inc 7+2+4
|
|
lda 7+2+4
|
|
cmp 7+2+2
|
|
bne loop
|
|
|
|
done anop
|
|
jsl incBusy
|
|
plb
|
|
jmp bye10
|
|
|
|
END
|
|
|
|
;=========================================================================
|
|
;
|
|
; _ReadLine
|
|
;
|
|
;=========================================================================
|
|
|
|
NewReadLine START
|
|
using KernelStruct
|
|
using TextToolsInfo
|
|
using InOutData
|
|
|
|
cmdlen equ 1
|
|
cmdloc equ 3
|
|
tmp equ 5
|
|
wordspace equ 7+2+6+10
|
|
bufferPtr equ 7+2+6+6
|
|
maxCount equ 7+2+6+4
|
|
eolChar equ 7+2+6+2
|
|
echoFlag equ 7+2+6
|
|
|
|
phd
|
|
pushword #0 ; space for tmp variables
|
|
pushword #0
|
|
pushword #0
|
|
tsc
|
|
tcd
|
|
|
|
phb
|
|
phk
|
|
plb
|
|
jsl decBusy
|
|
|
|
dobgcheck lda truepid
|
|
xba
|
|
lsr a
|
|
lsr a
|
|
tax
|
|
lda InDeviceType,x
|
|
cmp #1
|
|
bne isfg
|
|
lda InSlot,x
|
|
tax
|
|
lda #21
|
|
jsl BGCheck
|
|
cmp #0
|
|
beq isfg
|
|
cmp #1
|
|
beq dobgcheck ; we were suspended, try again
|
|
|
|
jsl incBusy ; the return code was -1, which means
|
|
plb
|
|
pla
|
|
pla
|
|
pla ; to abort this call with an error
|
|
ldx #$0027 ; code.
|
|
pld
|
|
ldy #2
|
|
jmp >tool_exit
|
|
|
|
isfg anop
|
|
|
|
stz <cmdlen
|
|
stz <cmdloc
|
|
|
|
cmdloop anop
|
|
phd
|
|
lda InOutDP
|
|
tcd
|
|
jsl VectIn
|
|
pld
|
|
cmp #0
|
|
bpl cmd0
|
|
jmp cmdoa ;Do open apple
|
|
cmd0 and #$7F
|
|
if2 @a,ne,#$7F,cmd1
|
|
jmp cmddel
|
|
cmd1 if2 @a,eq,eolChar,eol
|
|
if2 @a,cs,#' ',cmdIns ;Do control char
|
|
jmp cmdctl
|
|
;
|
|
; EOL character encountered
|
|
;
|
|
eol lda <cmdlen
|
|
sta wordspace
|
|
plb
|
|
pla ; jb 8/7/91
|
|
pla ; remove temp dp space I added to
|
|
pla ; make this reentrant
|
|
jsl incBusy
|
|
jmp bye10
|
|
;
|
|
; Insert alphanum character
|
|
;
|
|
cmdIns sta <tmp
|
|
lda <cmdlen
|
|
cmp maxCount
|
|
bcc cmIns0
|
|
WriteChar #7
|
|
jmp cmdloop
|
|
cmIns0 phd
|
|
lda InOutDP
|
|
tcd
|
|
lda IODP_gInsertFlag
|
|
pld
|
|
cmp #0
|
|
beq cmOver ;Do insert mode
|
|
short a
|
|
ldy <cmdlen
|
|
cmIns1 anop
|
|
cpy <cmdloc
|
|
beq cmIns2
|
|
bcc cmIns2
|
|
dey
|
|
lda [bufferPtr],y
|
|
iny
|
|
sta [bufferPtr],y
|
|
dey
|
|
bra cmIns1
|
|
cmIns2 long a
|
|
inc <cmdlen
|
|
;
|
|
; Place character in string and output
|
|
;
|
|
cmOver lda <tmp
|
|
ldy <cmdloc ;Do overstrike mode
|
|
short a
|
|
sta [bufferPtr],y
|
|
long a
|
|
iny
|
|
sty <cmdloc
|
|
ldx echoFlag
|
|
beq echo0
|
|
phy
|
|
WriteChar @a
|
|
ply
|
|
echo0 cpy <cmdlen
|
|
bcc cmdov2
|
|
beq cmdov2
|
|
sty <cmdlen
|
|
;
|
|
; Redraw shifted text
|
|
;
|
|
cmdov2 phd
|
|
lda InOutDP
|
|
tcd
|
|
lda IODP_gInsertFlag
|
|
pld
|
|
cmp #0
|
|
jeq cmdloop
|
|
ldx echoFlag
|
|
jeq cmdloop
|
|
ldx #0
|
|
cmdov3 if2 @y,eq,<cmdlen,cmdov4
|
|
lda [bufferPtr],y
|
|
iny
|
|
inx
|
|
phx
|
|
phy
|
|
WriteChar @a
|
|
ply
|
|
plx
|
|
bra cmdov3
|
|
cmdov4 anop
|
|
cmdov5 dex
|
|
bmi cmdov6
|
|
phx
|
|
WriteChar #8
|
|
plx
|
|
bra cmdov5
|
|
cmdov6 jmp cmdloop
|
|
;
|
|
; Left arrow was pressed
|
|
;
|
|
cmdctl if2 @a,ne,#$08,ctl1 ;LEFT-ARROW
|
|
lda <cmdloc
|
|
bne ctl0a
|
|
WriteChar #7
|
|
jmp cmdloop
|
|
ctl0a dec a
|
|
sta <cmdloc
|
|
lda echoFlag
|
|
beq echo1
|
|
WriteChar #8
|
|
echo1 jmp cmdloop
|
|
;
|
|
; Right arrow was pressed
|
|
;
|
|
ctl1 if2 @a,ne,#$15,ctl2 ;RIGHT-ARROW
|
|
ldy <cmdloc
|
|
if2 @y,ne,<cmdlen,ctl1a
|
|
WriteChar #7
|
|
jmp cmdloop
|
|
ctl1a lda echoFlag
|
|
beq echo2
|
|
lda [bufferPtr],y
|
|
WriteChar @a
|
|
echo2 inc <cmdloc
|
|
jmp cmdloop
|
|
;
|
|
; Delete character under the cursor
|
|
;
|
|
ctl2 if2 @a,ne,#$04,ctl3 ;Control-D
|
|
delchar ldy <cmdloc
|
|
if2 @y,ne,<cmdlen,ctl2a
|
|
jmp cmdloop
|
|
ctl2a short a
|
|
ctl2aa if2 @y,eq,<cmdlen,ctl2b
|
|
iny
|
|
lda [bufferPtr],y
|
|
dey
|
|
sta [bufferPtr],y
|
|
iny
|
|
bra ctl2aa
|
|
ctl2b lda #' '
|
|
dey
|
|
sta [bufferPtr],y
|
|
iny
|
|
sta [bufferPtr],y
|
|
long a
|
|
ldy <cmdloc
|
|
ldx #0
|
|
lda echoFlag
|
|
beq ctl2f
|
|
ctl2c if2 @y,eq,<cmdlen,ctl2e
|
|
bcs ctl2d
|
|
ctl2e lda [bufferPtr],y
|
|
iny
|
|
inx
|
|
phx
|
|
phy
|
|
WriteChar @a
|
|
ply
|
|
plx
|
|
bra ctl2c
|
|
ctl2d anop
|
|
ctl2g dex
|
|
bmi ctl2f
|
|
phx
|
|
WriteChar #8
|
|
plx
|
|
bra ctl2g
|
|
ctl2f dec <cmdlen
|
|
jmp cmdloop
|
|
|
|
ctl3 anop
|
|
jmp cmdloop
|
|
;
|
|
; Open Apple - E Insert toggle
|
|
;
|
|
cmdoa anop
|
|
and #$7F
|
|
if2 @a,eq,#'e',cmdoa1
|
|
if2 @a,ne,#'E',cmdoa2
|
|
cmdoa1 phd
|
|
lda InOutDP
|
|
tcd
|
|
eor2 IODP_gInsertFlag,#1,IODP_gInsertFlag
|
|
pld
|
|
jmp cmdloop
|
|
;
|
|
; Open Apple - D Delete under cursor
|
|
;
|
|
cmdoa2 if2 @a,eq,#'d',cmdoa2a
|
|
if2 @a,ne,#'D',cmdoa3
|
|
cmdoa2a jmp delchar
|
|
|
|
cmdoa3 jmp cmdloop
|
|
;
|
|
; DELETE was pressed
|
|
;
|
|
cmddel anop
|
|
lda cmdloc
|
|
bne ctldel2
|
|
WriteChar #7
|
|
jmp cmdloop
|
|
ctldel2 dec a
|
|
sta cmdloc
|
|
lda echoFlag
|
|
beq echo3
|
|
WriteChar #8
|
|
echo3 jmp delchar
|
|
|
|
END
|
|
|
|
sl1Read START
|
|
ldx #$C10E
|
|
bra dopasc
|
|
sl1Write ENTRY
|
|
ldx #$C10F
|
|
bra dopasc
|
|
sl1Init ENTRY
|
|
ldx #$C10D
|
|
bra dopasc
|
|
sl1Status ENTRY
|
|
ldx #$C110
|
|
dopasc jsl incBusy
|
|
pea 0
|
|
pea 0
|
|
pea 0
|
|
pea 0
|
|
pha
|
|
short m
|
|
lda >0,x
|
|
long m
|
|
and #$00FF
|
|
ora #$C100
|
|
pea $c1
|
|
pea $10
|
|
pha
|
|
_FWEntry
|
|
ply
|
|
plx
|
|
pla
|
|
plp
|
|
plp
|
|
long m
|
|
jsl decBusy
|
|
rtl
|
|
END
|
|
|
|
sl2Read START
|
|
ldx #$C20E
|
|
bra dopasc
|
|
sl2Write ENTRY
|
|
ldx #$C20F
|
|
bra dopasc
|
|
sl2Init ENTRY
|
|
ldx #$C20D
|
|
bra dopasc
|
|
sl2Status ENTRY
|
|
ldx #$C210
|
|
dopasc jsl incBusy
|
|
pea 0
|
|
pea 0
|
|
pea 0
|
|
pea 0
|
|
pha
|
|
short m
|
|
lda >0,x
|
|
long m
|
|
and #$00FF
|
|
ora #$C200
|
|
pea $c2
|
|
pea $20
|
|
pha
|
|
_FWEntry
|
|
ply
|
|
plx
|
|
pla
|
|
plp
|
|
plp
|
|
long m
|
|
jsl decBusy
|
|
rtl
|
|
END
|
|
|
|
NullOut START KERN2
|
|
rtl
|
|
END
|
|
|
|
NullIn START KERN2
|
|
lda #0
|
|
rtl
|
|
END
|
|
NullStatus START KERN2
|
|
lda #0
|
|
sec
|
|
rtl
|
|
END
|
|
NullInit START KERN2
|
|
rtl
|
|
END
|
|
|
|
C80Init START KERN2
|
|
using InOutData
|
|
phd
|
|
lda >InOutDP
|
|
tcd
|
|
lda #12
|
|
jsl COUT
|
|
pld
|
|
rtl
|
|
END
|
|
|
|
************************************************************
|
|
*
|
|
* I/O/E vector entry points
|
|
* all TextTools calls come through these three routines
|
|
*
|
|
************************************************************
|
|
|
|
VectIn START KERN2
|
|
using TextToolsInfo
|
|
using KernelStruct
|
|
|
|
phb
|
|
pha
|
|
phx
|
|
pha
|
|
|
|
lda >truepid
|
|
asl a
|
|
asl a
|
|
asl a
|
|
asl a
|
|
asl a
|
|
asl a
|
|
tax
|
|
short m
|
|
lda >InVect+2,x
|
|
sta 7,s
|
|
long m
|
|
lda >InVect,x
|
|
sta 5,s
|
|
pla
|
|
plx
|
|
rtl
|
|
END
|
|
|
|
VectOut START KERN2
|
|
using TextToolsInfo
|
|
using KernelStruct
|
|
|
|
phb
|
|
pha
|
|
phx
|
|
pha
|
|
lda >truepid
|
|
asl a
|
|
asl a
|
|
asl a
|
|
asl a
|
|
asl a
|
|
asl a
|
|
tax
|
|
short m
|
|
lda >OutVect+2,x
|
|
sta 7,s
|
|
long m
|
|
lda >OutVect,x
|
|
sta 5,s
|
|
pla
|
|
plx
|
|
rtl
|
|
END
|
|
|
|
VectErr START KERN2
|
|
using TextToolsInfo
|
|
using KernelStruct
|
|
|
|
phb
|
|
pha
|
|
phx
|
|
pha
|
|
lda >truepid
|
|
asl a
|
|
asl a
|
|
asl a
|
|
asl a
|
|
asl a
|
|
asl a
|
|
tax
|
|
short m
|
|
lda >ErrVect+2,x
|
|
sta 7,s
|
|
long m
|
|
lda >ErrVect,x
|
|
sta 5,s
|
|
pla
|
|
plx
|
|
rtl
|
|
END
|
|
|
|
************************************************************
|
|
*
|
|
* Pipe Driver
|
|
*
|
|
* Grabs the pipe number (from the TTY struct) and calls
|
|
* either loRead or loWrite to get a single byte
|
|
*
|
|
************************************************************
|
|
|
|
pipeIN START KERN2
|
|
using TextToolsInfo
|
|
|
|
phy
|
|
phx
|
|
jsr getTTindex
|
|
lda >InSlot,x ; something else needs to set this up
|
|
pha
|
|
* jsl loRead
|
|
plx
|
|
ply
|
|
rtl
|
|
END
|
|
|
|
pipeOUT START KERN2
|
|
using TextToolsInfo
|
|
|
|
phy
|
|
phx
|
|
pha
|
|
pha
|
|
jsr getTTindex
|
|
lda >OutSlot,x ; something else needs to set this up
|
|
pha
|
|
* jsl loWrite
|
|
pla
|
|
plx
|
|
ply
|
|
rtl
|
|
END
|
|
|
|
************************************************************
|
|
*
|
|
* Redirection Driver
|
|
*
|
|
* Note that the redirection drivers only use the old
|
|
* entry points- this is because pipes will be handled
|
|
* entirely through our GS/OS intercept
|
|
*
|
|
************************************************************
|
|
|
|
fileIN START KERN2
|
|
using TextToolsInfo
|
|
phb
|
|
phk
|
|
plb
|
|
phx
|
|
|
|
pha ; result buffer!
|
|
tsc
|
|
pha ; transfer count
|
|
pha
|
|
pea 0
|
|
pea 1 ; request count
|
|
pea 0
|
|
inc a
|
|
pha ; push buffer address
|
|
|
|
jsr getTTindex
|
|
lda >InSlot,x ; something else needs to set this up
|
|
pha ; push the refnum
|
|
pea 4 ; number of parameters
|
|
tsc
|
|
inc a
|
|
pea 0
|
|
pha ; address of pBlock
|
|
pea $2012 ; command code
|
|
jsl StackGSOS
|
|
bcc leave
|
|
cmp #$4C
|
|
bne leave
|
|
lda #$7F00
|
|
sta 17,s
|
|
leave anop
|
|
tsc
|
|
clc
|
|
adc #16
|
|
tcs
|
|
pla
|
|
plx
|
|
plb
|
|
rtl
|
|
|
|
*READPB dc i2'5'
|
|
*READrefNum dc i2'0'
|
|
* dc i4'buffer'
|
|
* dc i4'1'
|
|
*xferCount dc i4'0'
|
|
* dc i2'1' ; cache blocks!
|
|
*buffer ds 16 ; in case we decide to get clever
|
|
*char dc i2'0'
|
|
END
|
|
|
|
* This routine temporarily turns off GS/OS debug output, to prevent
|
|
* an infinite recursion. This was done to allow pipes to be accessed
|
|
* thru the texttools file interface if desired. The pipe interface
|
|
* sports much better performance, however.
|
|
|
|
fileOUT START KERN2
|
|
using TextToolsInfo
|
|
using KernelStruct
|
|
|
|
phb
|
|
phk
|
|
plb
|
|
phx
|
|
pha ; data buffer
|
|
|
|
tsc
|
|
pha ; transfer count
|
|
pha
|
|
pea 0
|
|
pea 1 ; request count
|
|
pea 0
|
|
inc a
|
|
pha ; push buffer address
|
|
|
|
jsr getTTindex
|
|
lda >OutSlot,x ; something else needs to set this up
|
|
pha
|
|
;sta WRITErefNum
|
|
lda >stateFlags,x
|
|
and #%00000001 ; 1 = stdout, 2 = stderr
|
|
bne convMode1 ; last char was a CR
|
|
lda 15,s
|
|
and #$7F
|
|
cmp #$0D
|
|
bne noConv1
|
|
lda >stateFlags,x
|
|
ora #%00000001
|
|
sta >stateFlags,x
|
|
bra noConv1
|
|
convMode1 lda 15,s
|
|
and #$7F
|
|
cmp #$0A
|
|
bne noConv1 ; ignore the LF part of CRLF
|
|
lda >stateFlags,x
|
|
and #%1111111111111110
|
|
sta >stateFlags,x
|
|
pha
|
|
bra leave1
|
|
noConv1 anop
|
|
* lda 15,s
|
|
* sta buffer
|
|
pea 4 ; pCount
|
|
tsx ; put it in X for now
|
|
|
|
lda >gsosDebug
|
|
pha
|
|
lda #0
|
|
sta >gsosDebug
|
|
pea 0
|
|
inx
|
|
phx ; push the pBlock ptr
|
|
pea $2013 ; write command code
|
|
jsl StackGSOS
|
|
*Write WRITEPB
|
|
pla
|
|
sta >gsosDebug
|
|
leave1 anop
|
|
tsc
|
|
clc
|
|
adc #16
|
|
tcs
|
|
pla
|
|
plx
|
|
plb
|
|
rtl
|
|
|
|
fileERR ENTRY
|
|
phb
|
|
phk
|
|
plb
|
|
phx
|
|
pha ; data buffer
|
|
|
|
tsc
|
|
pha ; transfer count
|
|
pha
|
|
pea 0
|
|
pea 1 ; request count
|
|
pea 0
|
|
inc a
|
|
pha ; push buffer address
|
|
|
|
jsr getTTindex
|
|
lda >ErrSlot,x ; something else needs to set this up
|
|
pha
|
|
*sta WRITErefNum
|
|
lda >stateFlags,x
|
|
and #%00000010 ; 1 = stdout, 2 = stderr
|
|
bne convMode2 ; last char was a CR
|
|
lda 15,s
|
|
and #$7F
|
|
cmp #$0D
|
|
bne noConv2
|
|
lda >stateFlags,x
|
|
ora #%00000010
|
|
sta >stateFlags,x
|
|
bra noConv2
|
|
convMode2 lda 15,s
|
|
and #$7F
|
|
cmp #$0A
|
|
bne noConv2 ; ignore the LF part of CRLF
|
|
lda >stateFlags,x
|
|
and #%1111111111111101
|
|
sta >stateFlags,x
|
|
pha
|
|
bra leave2
|
|
noConv2 anop
|
|
* lda 1,s
|
|
* sta buffer
|
|
|
|
pea 4 ; pCount
|
|
tsx ; put it in X for now
|
|
|
|
lda >gsosDebug
|
|
pha
|
|
lda #0
|
|
sta >gsosDebug
|
|
|
|
pea 0
|
|
inx
|
|
phx
|
|
pea $2013 ; write command code
|
|
jsl StackGSOS
|
|
*Write WRITEPB
|
|
pla
|
|
sta >gsosDebug
|
|
leave2 anop
|
|
tsc
|
|
clc
|
|
adc #16
|
|
tcs
|
|
pla
|
|
plx
|
|
plb
|
|
rtl
|
|
|
|
*WRITEPB dc i2'5'
|
|
*WRITErefNum dc i2'0'
|
|
* dc i4'buffer'
|
|
* dc i4'1'
|
|
*xferCount dc i4'0'
|
|
* dc i2'1' ; cache blocks!
|
|
*buffer ds 16 ; in case we decide to get clever
|
|
END
|
|
|