home *** CD-ROM | disk | FTP | other *** search
- ;MKEY - Give "mkey (filename)"
-
- base equ 0
- dmad1 equ base+80h
- fcb equ base+5ch
- fcr equ 32
-
- stackp:: dw 0 ;keeps stack ptr
- pasbuf:: ds 8
-
- start:: ld (stackp),sp
- ld sp,stac0
- call open
- inc a
- jp z,nofdis
- xor a
- ld (fcb+fcr),a
- ld de,buf0
- call rdsec
- jp nz,nregds ;if eof
- ld de,buf0+80h
- call rdsec
- jp nz,nregds ;if eof
- call cpasgt ;gets coded keyword from old and new dmush
- call dmshmk ;reconstitutes dmush
- call comp ;ret nz if not correct
- jp nz,nregds
- call pasinv ;decode keyword from old and new nmush
- call chcvld ;ret c if invalid keyword
- jp c,nregds
- call pasdis ;display valid keyword
- reb:: ld sp,(stackp)
- jp base
-
- ;sr open read fcb
- open:: ld de,fcb
- ld c,0fh
- call base+5
- ret
-
- ;sr read (fcb) to (de), ret nz if eof
- rdsec:: ld c,1ah
- call base+5 ;set dma
- ld de,fcb
- ld c,14h
- call base+5 ;read sequential
- or a
- ret ;nz if eof
-
- ;sr get coded keyword from old and new dmush
- cpasgt:: ld c,51 ;arb start offset
- ld b,8 ;ct
- clp:: ld hl,buf0+80h ;new dmush
- ld a,c
- add a,l
- ld l,a
- jr nc,clp2
- inc h ;start byte addr
- clp2:: ld ix,buf0+50h ;new nmush adr
- ld a,b
- and 7
- ld e,a
- ld d,0
- add ix,de
- ld a,(hl)
- ld e,a
- and 0aah
- rra
- xor e
- dec h
- sub (hl)
- inc h
- ld (ix),a
- ld a,c
- add a,23 ;col incr
- and 7fh
- ld c,a
- djnz clp
- ret
-
- ;sr reconstitute mush
- dmshmk:: ld c,51 ;arb start pt
- ld b,80h ;length
- mlp:: ld hl,pag1+80h
- ld a,c
- add a,l
- ld l,a
- jr nc,mlp2
- inc h
- mlp2:: ld ix,buf0+50h ;poss keyword
- ld a,b ;use b value for keyword ptr
- and 7
- ld e,a
- ld d,0
- add ix,de
- ld a,(ix)
- add a,(hl)
- ld e,a
- and 0aah
- rra
- xor e
- ld (hl),a
- ld a,c
- add a,23 ;col incr
- and 7fh
- ld c,a
- djnz mlp
- ret
-
- ;sr compare reconstituted mush
- comp:: ld hl,pag1+80h
- ld de,buf0+80h
- ld b,80h
- comp2:: ld a,(de)
- cp (hl)
- ret nz
- inc hl
- inc de
- djnz comp2
- ret
-
- ;sr decode keyword from old and new nmush
- pasinv:: ld ix,pasbuf
- ld de,4 ;arb start offset
- ld b,8 ;ct
- invlp:: ld hl,buf0+50h
- ld iy,pag1+50h
- add hl,de
- add iy,de
- ld a,(hl)
- ld c,a
- and 55h
- rla
- xor c
- sub (iy)
- ld (ix),a
- ld a,e
- add a,3 ;col incr
- and 7
- ld e,a
- inc ix
- djnz invlp
- ret
-
- ;sr ret c if invalid keyword char
- chcvld:: ld hl,pasbuf
- ld b,8
- vldlp:: ld a,(hl)
- cp ' '
- jr z,vldchr
- cp '/'
- ret c
- cp ':'
- jr c,vldchr
- cp '@'
- ret c
- cp '['
- ccf
- ret c
- vldchr:: inc hl
- djnz vldlp
- xor a ;clear carry
- ret
-
- nofdis:: ld de,nofmsg
- call string
- jp reb
- nofmsg:: db 'No file',0dh,0ah,'$'
-
- nregds:: ld de,nregms
- call string
- jp reb
- nregms:: db 'File irregular or not locked'
- db 0dh,0ah,'$'
-
- pasdis:: ld de,pasms1
- call string
- ld hl,pasbuf
- ld b,8
- pdlp:: ld a,(hl)
- call disp
- inc hl
- djnz pdlp
- ld de,pasms2
- call string
- ret
- pasms1:: db 0dh,0ah,'Keyword - $'
- pasms2:: db 0dh,0ah,0dh,0ah,'Don''t '
- db 'forget it again!',0dh,0ah,'$'
-
- string:: ld c,9
- call base+5
- ret
-
- disp:: push bc
- push de
- push hl
- ld e,a
- ld c,2
- call base+5
- pop hl
- pop de
- pop bc
- ret
-
- pag1:: .phase base+100h
-
- db 0dh,0ah,'==<Locked file>== ',0dh,0ah,1ah
- ;as a seq of instns, this gives a jump either to
- ;122h or to 173h
-
- fill:: ds base+122h-fill ;foll instn shd be 122h
- ;173h will be set to jr 122h later
-
- sendms:: ld hl,base+100h
- ld a,(hl)
- cp 1ah
- jp z,base
- push bc
- push de
- push hl
- ld e,a
- ld c,2
- call base+5
- pop hl
- pop de
- pop bc
- inc hl
- jr sendms+3
-
- ;next byte 13ah
- db 0f5h,79h,10h,0afh,23h,09h
- db 51h,00h,19h,71h,0d9h,6fh,0b8h,0b6h
- db 70h,26h,0a6h,63h,51h,03h,44h,20h
-
- nmush:: db 57h,7eh,0c5h,14h,8fh,47h,0c1h,27h ;adr 150h
- db 0feh,0eeh,9fh,0edh,09h,0a9h,33h,76h
- db 0e2h,11h,72h,0d7h,0e3h,5dh,74h,66h
- db 66h,39h,0fh,2dh,15h,34h,0ch,81h
- db 25h,61h,33h,09h,12h,3eh,4eh,37h
- db 96h,0b0h,0ebh,41h,89h,0a0h,24h,78h
-
- dmush:: db 48h,0e0h,23h,0afh,2ah,77h,0f6h,86h ;adr 180h
- db 0c3h,3ah,0d8h,7eh,5bh,7fh,0c1h,0eh
- db 57h,0f8h,30h,26h,11h,0fh,2eh,0d8h
- db 08h,6dh,0bah,7fh,8ch,0cch,90h,4ah
-
- db 95h,0a5h,0e4h,9fh,76h,5fh,0e0h,01h
- db 1fh,22h,9ah,77h,3ch,5dh,0a0h,0a7h
- db 75h,0a7h,0cfh,76h,0ach,40h,6fh,0aah
- db 3eh,79h,56h,5eh,69h,77h,3ah,64h
-
- db 3eh,56h,53h,4dh,01h,29h,47h,0b2h
- db 61h,85h,6ch,4ah,0a9h,0a2h,0d8h,0f3h
- db 9fh,4fh,0bah,32h,0c2h,43h,4dh,31h
- db 8ch,0ach,09h,58h,5ah,0fh,75h,0f7h
-
- db 0aah,73h,0a5h,9dh,0f3h,2dh,0beh,58h
- db 03h,4ah,0d9h,21h,30h,4eh,0d7h,75h
- db 0a8h,98h,82h,02h,41h,9ch,02h,0eh
- db 0c4h,61h,63h,61h,10h,0a2h,42h,48h
-
- .dephase
-
- buf0:: ds 100h
- ds 20h ;for stack
-
- stac0:: end start
-