[an error occurred while processing this directive]


; Библиотека для работы с TEAC

; Дата написания 10.8.94

; BorSoft
; Copyright 1994

; If You have some changes in this file
; PLEASE Call (095) 188-31-34 ( in Moscow )

 chn fheader.asm
 chn fwords.asm

 org 0-¤1e6
                 
; Смещение до библиотеки и ее длина
Start
 dw 0-Start
 dw EndLib-BegLib

; Входы в словарь
 dw  0           1
 dw  Dplus       2
 dw  Val         3
 dw  Dval        4
 dw  Ncase       5
 dw  Search      6
 dw  Skipstr     7
 dw  Countstr    8
 dw  Insstring   9
 dw  Restoremem  10
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0
 dw  0

; Объектные ссылки
 dw  l000+1
 dw  l001+1
 dw  l002+1
 dw  l003+1
 dw  l004+1
 dw  l005+1
 dw  l006+1
 dw  l007+1
 dw  l008+1
 dw  l009+1
 dw  l010+1
 dw  l011+1
 dw  l012+1
 dw  l013+1
 dw  l014+1
 dw  l015+1
 dw  l016+1
 dw  l017+1
 dw  l018+1
 dw  l019  
 dw  l020   
 dw  l021  
 dw  l022  
 dw  l023  
 dw  l024  
 dw  l025  
 dw  l027+1
 dw  l028  
 dw  l029+1
 dw  l030+1
 dw  l032+1
 dw  l033+1
 dw  l034+1
 dw  l035+1
 dw  l036+1
 dw  l037+1
 dw  l038
 dw  l039+1
 dw  l041+1
 dw  l042+1
 dw  l043+1
 dw  l044+1
 dw  l045+1
 dw  l046+1
 dw  l047+1
 dw  l048  
 dw  l049  
 dw  l051+1
 dw  l052+1
 dw  l053+1
 dw  l054+1
 dw  l055+1
 dw  l056  
 dw  l057  
 dw  l058  
 dw  l059+1
 dw  l060+1
 dw  l061+1
 dw  l062+1
 dw  l063+1
 dw  l064+1
 dw  l065+1
 dw  l066+1
 dw  l067+1
 dw  l068+1
 dw  l069+1
 dw  l070+1
 dw  l071+1
 dw  l072+1
 dw  l073+1
 dw  l074+1
 dw  l075+1
 dw  l076+1
 dw  l077+1
 dw  l078+1
 dw  l079  
 dw  l080  
 dw  l081+1
 dw  l082+1
 dw  l0821+1
 dw  l083+1
 dw  l084+1
 dw  l085+1
 dw  l0851+1
 dw  l086+1
 dw  l087+1
 dw  l088+1
 dw  l089+1
 dw  l090+1
 dw  l091+1
 dw  l092+1
 dw  l093+1
 dw  l094+1
 dw  l095+1
 dw  l096+1
 dw  l097+1
 dw  l098+1
 dw  l0981+1
 dw  l0982+1
 dw  l0983+1
 dw  l0984+1
 dw  l100+1
 dw  l101  
 dw  l102  
 dw  l103+1
 dw  l104+1
 dw  l105+1
 dw  l106+1
 dw  l107+1
 dw  l108+1
 dw  l109+1
 dw  l110+1
 dw  l111+1
 dw  l112+1
 dw  l113+1
 dw  l114+1
 dw  l115+1
 dw  l116+1
 dw  l117+1
 dw  l118+1
 dw  l119+1
 dw  l120+1
 dw  l121+1
 dw  l122+1
 dw  l123+1
 dw  l125+1
 dw  l126+1
 dw  l127+1
 dw  l128+1
 dw  l129+1
 dw  l130+1
 dw  l131+1
 dw  l132+1
 dw  l133+1
 dw  l134+1
 dw  l135+1
 dw  l136+1
 dw  l137+1
 dw  l138+1
 dw  l139+1
 dw  l140+1
 dw  l141+1
 dw  l143+1
 dw  l144+1
 dw  l145+1
 dw  l146+1
 dw  l147+1
 dw  l148+1
 dw  l149+1
 dw  l150  
 dw  l151+1
 dw  l152+1
 dw  l153+1
 dw  l154+1
 dw  l155+1
 dw  l156+1
 dw  l157+1
 dw  l158+1
 dw  l159+1
 dw  l160+1
 dw  l161+1
 dw  l162+1
 dw  l163+1
 dw  l164+1
 dw  l165+1
 dw  l166+1
 dw  l167+1
 dw  l200+1
 dw  l201+1
 dw  l202+1
 dw  l203+1
 dw  l204+1
 dw  l205+1
 dw  l208+1
 dw  l213+1
 dw  l214+1
 dw  l216+1
 dw  l2162+1
 dw  l219+1
 dw  l220  
 dw  l221  
 dw  l226+1
 dw  l227+1
 dw  l228+1
 dw  l231  
 dw  l232+1
 dw  l233+1
 dw  l234+1
 dw  l235+1
 dw  l236+1
 dw  l300+1
 dw  l3001  
 dw  l301+1
 dw  l302+1
 dw  l303+1 
 dw  l304+1
 dw  l305+1
 dw  l306+1
 dw  l308+1
 dw  l309+1
 dw  l311+1
 dw  l312+1
 dw  l313+1
 dw  l315+1
 dw  l316+1
 dw  l317+1
 dw  l318+1
 dw  l319+1
 dw  l320+1
 dw 0
     
; Начало библиотеки
BegLib  dfb ¤0      Этот байт необходим просто !
          
; Инициализация библиотеки
Teaclib
 dfb ¤87
 asc "teacliB"
 dw  0

teaclib  
 jsr lit
l025
  dw teac 
 jsr regtreat

; Обработаем по- своему ошибку.
 jsr lit
l028     
  dw myerr       Куда будем переходить
l029
 jsr nexterr     Куда адрес текущей ошибки
 jsr makemyerr
l316
 jsr crtlib
l317
 jsr memlib

l318
 jmp strlib

; Function 0- опознаем слот по номеру в стеке
LookForTeac
 sta WorkSlt+1
 inc WorkSlt+1
 inc WorkSlt+1
 inc WorkSlt+1
 sta SW+3
 ora #¤c0
 sta Vrem+1
 ldy #¤0
 sty WorkSlt
 tya
 sta (WorkSlt),y
 sty Vrem
 lda (Vrem),y
 cmp #¤a2
 bne notteac
 ldy #¤c
 lda (Vrem),y
 cmp #¤bd
 bne notteac
 
; Здесь TEAC уже опознали
 ldy #¤0
 lda #¤1
 sta (WorkSlt),y
 iny
 lda SW+3
 asl a
 asl a
 asl a
 asl a
 sta SW+3
 sta (WorkSlt),y
 ldy #¤4
 lda #¤c
l000
 jsr TestnRegis
 lda #¤3
 sty Vrem+4
l001
 jsr TestnRegis
 bcs w034
 lda Vrem+4
 ldy #5
 sta (WorkSlt),y
w034
 clc
 rts
 
notteac
 sec
 rts
 
; Вспомогательная процедура
TestnRegis
 pha
 lda #¤0
 sta (WorkSlt),y
 iny
 sta (WorkSlt),y
 iny
 sta (WorkSlt),y
 iny
 pla
 pha
 and #¤1
 ora #¤6
 sta (WorkSlt),y
 iny
 iny
 iny
 lda #¤ff
 sta (WorkSlt),y   Мы не знаем где находимся на диске
 iny
 iny
 sty Vrem+5
 pla
 ldy SW+3
 and TeacState,y
 beq isit
 sec 
w036
 ldy Vrem+5      Установим новое смещение для адреса слоты
 rts
 
isit
 clc
 bcc w036

; Function 1- захватить устройство------------------------
DriveOn
 ldy SW+2
 dey
 lda (WorkSlt),y
 beq lockit
w049
 sec             Это фатальная ошибка системы
w050
 rts  
 
lockit
 lda InProcess
 bne w049
 lda ID
 sta (WorkSlt),y
 sta InProcess
 iny
 lda (WorkSlt),y
 ldy SW+3
 pha
 lda #¤92
 sta TeacCtrlReg,y
 lda #¤bd
 sta ¤c087,y
 pla
 sta TeacCtrlReg,y   Установим нужный привод
 lda #¤f
 sta TeacCtrlReg,y   Включим его
 lda #¤4
 sta TeacReset,y
 lda #¤9
 sta TeacReset,y
                
 clc
 rts
 
; Function 2- освободить устройство-----------------------
DriveOff
 ldy SW+2
 dey
 lda (WorkSlt),y
 cmp InProcess
 bne w036         Ошибка!!!
 
 lda #¤0
 sta (WorkSlt),y
 sta InProcess    Закончили работу с данным устройством
 
 lda #¤e          
 ldy SW+3
 sta TeacCtrlReg,y    
 
 clc
 rts

;--------------------------
; Вспомогательные процедуры
;--------------------------
; Где мы на диске
GetDiskAdr
l002
 jsr FindAdrH     
w102
 lda TeacSyncReg,x
 bpl w102
 lda TeacReadReg,x
 
w302
 lda TeacSyncReg,x
 bpl w302
 lda TeacReadReg,x
 
 rts

; Чтение заголовка поля адреса
FindAdrH 
 lda #¤95
 sta SW+¤c
 lda #¤6a
 sta SW+¤d

; Прочитаем заголовок трека-------------------------------
ReadHeader
; Задержка на раскрутку
waitt
 lda TeacState,x
 bmi waitt

 lda #Attempts
 sta SW+¤b

 lda #¤c
 sta TeacCtrlReg,x

l13
 sta TeacClrSync,x      Сбросим ошибки

l0
 lda TeacSyncReg,x
 asl a
 bmi l0                 Ждем синхросигнала 
 lda TeacReadReg,x      
   
 sta TeacClrSync,x
l1
 lda TeacSyncReg,x      Ждем готовности после синхро
 bpl l1
 lda TeacReadReg,x      Возьмем этот байт
 cmp SW+¤c
 bne tryagain           Если не начало блока,то ждем опять
  
 sta TeacClrSync,x
l2
 lda TeacSyncReg,x
 bpl l2
 lda TeacReadReg,x
 cmp SW+¤d
 bne tryagain
 
 clc
 rts         
 
tryagain 
 dec SW+¤b
 bne l13
 
 sec
 rts
 
; Чтение заголовка поля данных----------------------------
FindDatH
 lda #¤6a
 sta SW+¤c
 lda #¤95
 sta SW+¤d
l003
 jmp ReadHeader
  
; Поиск  нужного поля данных( 28 попыток, если не нашли,
;                             то С=1 )
FindSector
 lda #Attempts
 sta SW+7         

w004
l004
 jsr FindAdrH
 bcs erfi
w020
 lda TeacSyncReg,x
 bpl w020
 lda TeacReadReg,x
 
 ldy #¤0
lolo
 sta TeacClrSync,x
w021
 lda TeacSyncReg,x
 bpl w021
 lda TeacReadReg,x
 cmp SW+0,y
 bne tryagain2         Это наш трек?
 iny
 cpy #¤2
 bne lolo
 
w921
 lda TeacSyncReg,x
 bpl w921
 lda TeacReadReg,x
 cmp #¤5a
 bne erfi
 
 clc
 rts

tryagain2
 dec SW+7
 bne w004  

erfi
 sec
 rts
 
; Передвинемся к нужной дорожке---------------------------
MoveToSect
 stx SW+8
 ldx SW+3
w031
l006
 jsr Step   
 bcc w031

w032
 ldy SW+2
 iny 
 lda (WorkSlt),y
 iny
 iny
 sta (WorkSlt),y
 
 ldx SW+8
 rts
 
; Процедура "шаг" для кэша!-------------------------------
Step 
 ldy SW+2
 iny
 iny
 iny
 iny
 lda (WorkSlt),y
 sec
 sbc #¤1
 bmi nostep
 sta (WorkSlt),y

 sta TeacStep,x
 
 lda #¤80
 sta SW+¤c
 
w030
 ldy #¤d

w009
 dey
 bne w009
 
 dec SW+¤c
 bne w030
 
 clc
 rts

nostep
 sec
 rts

;-----------------------------------------------------
; Теперь сами функции для драйвера TEAC
;-----------------------------------------------------

; Установим адрес обращения к диску( адрес TS списка
; в SW+9 ) установим адрес для последнего TS в списке
; Установим также и SW+5,6
SetTSAdr
 lda Vrem
 sta SW+9
 lda Vrem+1
 sta SW+¤a
 lda Vrem+2
 sta SW+5
 lda Vrem+3
 sta SW+6

 stx SW+8
 ldx SW+3
 ldy #¤0   
 
 sty SW+4
 dec SW+6

nextts
 lda (SW+9),y
 iny
 ora (SW+9),y
 beq w312
 inc SW+6
 inc SW+4
 iny
 bne nextts

w312
 dey
 beq errset
 dey
 dey
 tya
 clc
 adc SW+9
 sta SW+9
 bcc w313
 inc SW+¤a
w313
 ldy #¤0

 lda (SW+9),y
 sta SW+0
 cmp #¤a0
 bcs errfile
 iny     
 lda (SW+9),y
 sta SW+1     
 ldy SW+2
 iny
 lda SW+0
 sta (WorkSlt),y
 and #¤1
 ora #¤8
 sta TeacCtrlReg,x   Выберем головку!!!
 lda SW+0
 and #¤fe
 sta SW+7

 iny
 lda SW+1
 sta (WorkSlt),y
 iny

 lda (WorkSlt),y  
 cmp #¤ff             Мы знаем где мы на диске?
 bne w037
 
l007
 jsr GetDiskAdr
 sta (WorkSlt),y

w037  
 and #¤fe
 iny
 sec
 sbc SW+7
 bcc w038
 
 lsr a
 sta (WorkSlt),y
 lda #¤4

w039
 sta TeacCtrlReg,x    Выберем направление
 ldx SW+8
 clc
 rts

w038
 eor #¤ff
 clc
 adc #¤1
 lsr a
 sta (WorkSlt),y
 lda #¤5
 bne w039

; Если на входе 0 адрес диска- то никакой реакции
errset
 ldy SW+2
 iny
 iny
 iny
 iny
 lda #¤0
 sta (WorkSlt),y
 clc
 rts 
 
errfile
 lda #ERRFILE
 ldy #¤0
 jsr Push
 jmp error

; Function 3- считать блок данных по адресу в SW+5,6
; и адресу TS списка в SW+9,10
ReadBlock
 ldy #¤0
readnow  
 lda #Attempts
 sta Vrem+¤e
 dec SW+4
 bmi eofreach

 stx SW+8
bitt
 ldx SW+3
    
l008
 jsr FindSector      Найдем наш сектор
 bcs erfind
l005
 jsr FindDatH
 bcs errrr
 
; Прoчитаем сектор
 ldy #¤0
 sty SW+7            Здесь накапливается контрольная сумма
w003
 lda TeacSyncReg,x
 bpl w003
 lda TeacReadReg,x

 sta (SW+5),y
 adc SW+7
 sta SW+7 
 iny
 bne w003

w024
 lda TeacSyncReg,x
 bpl w024
 lda TeacReadReg,x

 ldx SW+8            Восстановим старое значение Х
 cmp SW+7
 beq w310
 dec Vrem+¤e
 bne bitt

errrr
 lda #¤1
 sec
 rts
erfind
 lda #¤0
 sec
 rts
     
; Продолжаем процедуру подготовки к чтению след. сектора
w310
 lda #¤0
 ldy #¤1
 sta (SW+9),y
 dey 
 sta (SW+9),y   Очистим adres прочитанного сектора
 
 lda SW+9
 sec
 sbc #¤2
 bcs w311
 dec SW+¤a
w311
 sta SW+9       Уменьшим адрес на TS

 dec SW+6        Изменим адрес в памяти
 lda SW+4    
 beq eofreach

 lda (SW+9),y
 cmp SW+0        Это тот же трек?
 bne notsame
contr
 iny
 lda (SW+9),y

 sta SW+1
l009
 jmp readnow

; Достигли конца файла
eofreach
 clc
 rts

; Перейдем к другому треку
notsame
 eor SW+0
 and #¤fe
 bne anothertr    Совсем другой трек
 
; Иначе просто сменим головку
 ldx SW+3
 lda (SW+9),y
 sta SW+0
 and #¤1
 ora #¤8
 sta TeacCtrlReg,x
 ldx SW+8
 bne contr

; Установим новый адрес на диске
anothertr
l010
 jsr SetTSAdr
l011
 jsr MoveToSect        В конце для кэша !!!
    
l012
 jmp readnow

; Запись блока( с адреса в SW+5,6 )
; по TS списку( адрес в SW+9,10 )-4 функция
; в SW+4 длина блока----------------------------------
WriteBlock
writenow
 dec SW+4
 bmi eofreach

 stx SW+8
 ldx SW+3
 
 lda TeacState,x
 and #¤20
 bne writeok
    
writeprot
 ldx SW+8
 lda #¤2
 sec
 rts
            
writeok
l032  
 jsr FindSector      Найдем наш сектор
 bcs erfind
 
 lda #¤d
 sta TeacCtrlReg,x   Запись сейчас
 lda #¤aa
 sta TeacWritReg,x
 lda #¤8
 sta TeacReset,x
 lda #¤5
 sta TeacReset,x

; Запишем сектор
 ldy #¤9 
w800
 lda TeacSyncReg,x
 bpl w800
 lda #¤aa
 sta TeacWritReg,x                    
 dey
 bne w800
 
 lda #¤a4 
l039
 jsr WriteByte
titi
 lda TeacSyncReg,x
 bpl titi
 lda #¤ff
 sta TeacWritReg,x
 sta TeacWriteSyn,x
 lda #¤6a
l041
 jsr WriteByte
 lda #¤95
l042
 jsr WriteByte

 ldy #¤0
 sty SW+¤7
 clc
waitgt
 lda TeacSyncReg,x
 bpl waitgt
 lda (SW+5),y
 sta TeacWritReg,x
 adc SW+7
 sta SW+7 
 iny   
 bne waitgt
l043
 jsr WriteByte
llll
 lda TeacSyncReg,x
 bpl llll
 lda #¤5a     
l044
 jsr WriteByte
 lda #¤aa
l045
 jsr WriteByte

 lda #¤0
 ldy #¤1          
 sta (SW+9),y
 dey 
 sta (SW+9),y        Очистим adres записанного сектора
 
 lda SW+9
 sec
 sbc #¤2
 bcs w911
 dec SW+¤a
w911
 sta SW+9       Уменьшим адрес на TS

 lda #¤4
 sta TeacReset,x
 lda #¤9
 sta TeacReset,x
 lda #¤c
 sta TeacCtrlReg,x

 ldx SW+8       Восстановим старое значение Х

 dec SW+6       Изменим адрес в памяти
 lda SW+4    
 beq eofreach1

 lda (SW+9),y
 cmp SW+0       Это тот же трек?
 bne notsame1
contr1
 iny
 lda (SW+9),y

 sta SW+1                                 
l033
 jmp writenow

; Достигли конца файла
eofreach1
 clc
 rts

; Перейдем к другому треку
notsame1
 eor SW+0
 and #¤fe
 bne anothertr1   Совсем другой трек
 
; Иначе просто сменим головку
 ldx SW+3
 lda (SW+9),y
 sta SW+0
 and #¤1
 ora #¤8
 sta TeacCtrlReg,x
 ldx SW+8
 bne contr1

; Установим новый адрес на диске
anothertr1                                
l034
 jsr SetTSAdr
l035         
 jsr MoveToSect
    
l036
 jmp writenow
 
WriteByte
 ldy TeacSyncReg,x
 bpl WriteByte
 sta TeacWritReg,x
 rts
 
; Выборка файлов по шаблону
; на стеке: Patt_Adr For_Pat_Files Cat_Adr-
; выход:    Patt_Adr For_Pat_Files'( измененый )
pickfiles
 jsr StackVrem
 jsr StackVrem2
 jsr Pop
 inx
 inx
 stx Vrem+6
 sta Vrem+4
 sty Vrem+5

 ldy #¤7
 sty Vrem+8
 ldy #¤0
 lda (Vrem+4),y
 sta Vrem+9
 inc Vrem+9
 lda #¤b
 
NextN
 clc
 adc Vrem
 sta Vrem
 bcc ncr
 inc Vrem+1
ncr    
 ldy #¤0
 sty Vrem+¤b
 lda (Vrem),y
 beq NotThisN1
 cmp #¤ff
 beq NotThisN1
 ldx #¤0
 lda #¤2
 clc
 adc Vrem
 sta Vrem
 bcc NextNmS-1
 inc Vrem+1
 iny

; Начнем сравнение имени с шаблоном
NextNmS
 sty Vrem+¤c
 inc Vrem+¤b
 ldy Vrem+¤b
 lda (Vrem+4),y
 sta Vrem+¤d
 ldy Vrem+¤c
 
CmpNextS
 lda (Vrem),y
 beq NotThisN
 cmp #BLANK
 beq NameE
 pha
 lda Vrem+¤b
 cmp Vrem+9
 beq NotThisN
 pla
 cmp Vrem+¤d
 bne SpecS
ContC
 iny
 inx
 cpx #¤11
 bne NextNmS

NameE
 lda Vrem+¤d
 cmp #'*'
 beq LastS?
 dec Vrem+¤b
LastS?
 ldy Vrem+¤b
 iny
 cpy Vrem+9
 beq RegistrN
 
NotThisN
 lda #¤21
NotThis
 dec Vrem+8
 bne NextN

 ldy #¤0
 tya
 sta (Vrem+2),y
 ldx Vrem+6

 jmp Vrem2Stack
 
NotThisN1
 lda #¤23
 bne NotThis

SpecS
 lda Vrem+¤d
 cmp #'*'
 beq CmpD
 cmp #'?'
 beq ContC
 bne NotThisN
 
CmpD
 lda (Vrem),y
 cmp #DOT
 beq NextNmS
 iny
 inx
 cpy #¤11
 bne CmpNextS
 beq LastS?
 
RegistrN
 ldy #¤0
 txa
 sta (Vrem+2),y
 lda (Vrem),y
 sta Vrem+¤b
NxtSmC  
 txa
 beq EndC
 iny
 lda (Vrem),y
 sta (Vrem+2),y
 dex
 bne NxtSmC
EndC
 iny
 lda #ENTERKEY
 sta (Vrem+2),y
 iny
 lda Vrem+¤b
 sta (Vrem+2),y
 iny
 tya
 clc
 adc Vrem+2
 sta Vrem+2
 bcc NotThisN
 inc Vrem+3
 bne NotThisN

; Чтение в SYSBUF по стеку
rdzerosys
 jsr dup
 jsr temp1
 jsr store
 jsr zero
 jsr store
 jsr zero
 jsr two
 jsr store
 jsr sysbuf
 jsr zero
 jsr three

 jmp outd

; Поиск имени файла в каталоге
findfile
 jsr lit
  dw ¤11
l046
 jsr rdzerosys  Считаем 1100
 
 jsr bran
  dw notfind-*-2

setadr       
l047
 jsr rdzerosys  Считаем очередной трек
 jsr findinbuf
 jsr ddup
 jsr zbran
  dw notfind-*-2

; Здесь мы нашли( в стеке TS адрес )
 rts
 
notfind
 jsr sysbuf
 jsr onep
 jsr at
 jsr ddup   
 jsr nzbran
  dw setadr-*-2

 jmp false       Все прошли и ничего не нашли
 
;-------------------------------------------------------
; Процедуры сопряжения с FORTH                          
;
;
;-------------------------------------------------------
 
; Поиск накопителя на слоте-------------------------------
TF0                 
 jsr Pop
l013
 jsr LookForTeac
 bcs w060
 ldy #0
 iny
 iny
 lda DevProc
 sta (WorkSlt),y
 iny
 lda DevProc+1
 sta (WorkSlt),y   Сохраним адрес обработчика в обл. слоты
; Опознали !!
 jmp TrueFlag

w060
 jmp FalseFlag

; Захватим устройство------------------------------------
TF1
 lda #¤ff
 sta SystemWait
w961
l014
 jsr DriveOn
 
 bcs w961         Пытаемся захватить устройство
 
 lda #¤0
 sta SystemWait
 
 rts
 
; Освободим устройство----------------------------------
TF2 
l015
 jmp DriveOff

; Считаем/Запишем блок данных- на входе: MemAdr TSAdr R/W
ReadWrite
 pha
 jsr DisInt
 
 pla
 sta Vrem+¤d

 jsr Pop
 sta Vrem
 sty Vrem+1

 jsr Pop
 sta Vrem+2
 sty Vrem+3
    
l016
 jsr SetTSAdr
l017
 jsr MoveToSect
 
 bit Vrem+¤d
 bmi writee

readd
l018
 jsr ReadBlock
 bcs w963   

noerr
 jmp EnbInt      Восстановим как было
 
writee                                   
l037
 jsr WriteBlock
 bcc noerr
 
w963
 clc
 adc #¤10
 ldy #¤0
 jsr Push
 
 jmp error
                                                          
; Считаем блок по MEMADR TSADR                            
TF3
 lda #¤0
 beq ReadWrite

; Запишем блок как выше
TF4                                                       
 lda #¤ff
 bne ReadWrite

; Операции, связанные с чтением файлов:
; 0- есть файл на диске? стек:FileName
;                       выход:MemAdrTS FileAdr True/False
; 1- каталог по шаблону( в память ) стек:Pat_Adr MemAdr
TF5
 jsr mul2
l027
 jsr secrvector
 jsr plus 
 jsr at

 jmp exec
 
; Сами вторичные вектора для операций чтения файла-------
secrvector
 jsr Var
 
l048
 dw  isfile
l049
 dw  patcat
 dw  drverr
 dw  drverr  
 dw  drverr
 dw  drverr

; Найдем лишь файл на диске( на стеке адрес имени )
; На выходе:TSListAdr FileAdr True/False
isfile
l051
 jsr findfile
 jsr nzbran
  dw fileiss-*-2

 jsr drop

 jmp false

fileiss
 jsr tor
; Считаем TSList в SYSBUF+¤100
 jsr zero
 jsr store
 jsr zero        
 jsr two
 jsr store         
l077
 jsr sysbuf1       ++
 jsr zero
 jsr three
 jsr outd
l078
 jsr sysbuf1       ++
 jsr lit
  dw ¤c
 jsr plus
 jsr fromr  

 jmp true

; Выделим файлы из каталога в память
patcat
 jsr lit
  dw ¤11  
l052
 jsr rdzerosys

loopcat
 jsr sysbuf
 jsr onep
 jsr at
 

 jsr ddup
 jsr zbran
  dw nomore-*-2
 
 
 
  jsr dup
  jsr dot
  jsr space
 

l053
 jsr rdzerosys
 jsr sysbuf
l054
 jsr pickfiles
 jsr bran
  dw loopcat-*-2

nomore
 jmp ddrop


 chn sys01.lib
[an error occurred while processing this directive]