merging with Vasil's sources

This commit is contained in:
Anatoliy Belyanskiy 2023-08-11 04:54:30 +10:00
parent 209582b50d
commit 361333af09
39 changed files with 13336 additions and 11 deletions

View File

@ -63,7 +63,7 @@ START:
LD A,(IX-1)
LD (TASKX),A
PUSH IX
CALL CRLF
;CALL CRLF
CALL GETPATH
POP IX
;
@ -417,7 +417,7 @@ COMP002 XOR A
;LD C,#FF
LD C,A
CPIR
.loop: ;CPI
;.loop: CPI
;JP NZ,.loop
;
@ -1286,7 +1286,7 @@ PDIGIT LD DE,10000
LD DE,10
CALL DIG
LD A,L
ADD A,#30
ADD A,"0" ;#30
;!TEST
;LD (IX+0),A
@ -1673,6 +1673,7 @@ VERS: LD C,Dss.Version
res 7,(ix+0)
ld bc,100 ; 100
call .num16
.decim: ld bc,10 ; 10
call .num16
ld a,l
@ -1680,7 +1681,8 @@ VERS: LD C,Dss.Version
jr .num16_exit
.tmp1__: BYTE 0
.num16: ld a,2Fh
.num16: ld a,'0'-1
and a
inc a
sbc hl,bc

View File

@ -1 +1 @@
43
46

63
DOS/CURSOR.ASM Executable file
View File

@ -0,0 +1,63 @@
delay_curs equ 11 ; ç áâ®â  ¬¨£ ­¨ï ªãàá®à 
cursor: db 3Eh ; ld a,..
crFlag: db 0 ; ä« £ ªãàá®à  00-­¥â/01-¥áâì
cpl
ld (crFlag),a
; ‚ª«îç¨âì ªãàá®à
cursor_on:
ld c,8Eh ; ã§­ âì ¯®«®¦. ªãàá®à 
rst 08h
ld (curs_posit+1),de
xor a
ld c,0B4h ; ¯®«ãç¨âì ᨬ¢®«
rst 08h
ld bc,1BB5h ; b=§­ ª®£¥­., á=ᨬ¢®« ­  íªà ­
ld a,(crFlag)
or a
jr z,curs__
ld b,1Ah ; ç¥àâ 
ld a,(D0642) ; ä« £¨ ª« ¢ë
bit 1,a ; ¡¨â Ins
jr nz,$+4
ld b,19h ; ¡«®ª
curs__: xor a ; ­®¬¥à ®ª­ 
rst 08h
ld a,1
ld (curs_inv_flag),a
ld a,delay_curs
ret
; ‚몫îç¨âì ªãàá®à
cursor_off:
db 3Eh ; ld a,..
curs_inv_flag:
db 0 ; ä« £ ªãàá®à : 00-¢ëª«/01-¢ª«
or a
ret z
ld a,-1
ld (crFlag),a
inc a
ld (curs_inv_flag),a
ld a,delay_curs
ld (curs_timer),a
curs_posit:
ld de,0 ; Y/X ¯®«®¦.
bit 7,e
ret nz
ld c,0B4h ; ¯®«ãç¨âì ᨬ¢®«
xor a
rst 08h
xor a
ld bc,1BB5h ; ᨬ¢®« ­  íªà ­
rst 08h
ret
; “áâ ­®¢¨âì 䮪ãá ­  "Input Line"
focus_to_inpline:
call cursor_on ; ¢ª«. ªãàá®à
ei
ret

7531
DOS/DOS.ASM Executable file

File diff suppressed because it is too large Load Diff

91
DOS/DOS.INC Executable file
View File

@ -0,0 +1,91 @@
true equ 1
false equ 0
; ­®¬¥à ¢¥àᨨ „Ž‘
major_version equ 1 ; ¢¥àá¨ï (0..9)
minor_version equ 61 ; ¬®¤¨ä¨ª æ¨ï (0..99)
build_version equ 10 ; ¡¨«¤ (0..999)
; ¬ ªá. ç¨á«® ¤¥áªà¨¯â®à®¢ ä ©«®¢ ¢ á¨á⥬¥
max_handles equ 9
; ¬ ªá. ¤«¨­  áâப¨ ¯¥à¥¬¥­­®© ®ªà㦥­¨ï (¨¬ï + §­ ç¥­¨¥)
maxlen_env_string equ 255
A0000 equ 0
;A0101 equ 0101h ; 257 ?
L4000 equ 4000h
L403F equ 403Fh ; á⥪
LC000 equ 0C000h
LC1C0 equ 0C1C0h
LC1C8 equ 0C1C8h
LC400 equ 0C400h
LE400 equ 0E400h ; ­ ç «® ¡ãä¥à  ¯¥à¥¬¥­­ëå ®ªà㦥­¨ï
LFC7F equ 0FC7Fh
LFC80 equ 0FC80h
LFD00 equ 0FD00h
LFDFF equ 0FDFFh
LFE00 equ 0FE00h
;
LFEE0 equ 0FEE0h ; 32 ¡ ©â  ®¯¨á â¥«ï ®ª­  (8..31 § à¥§.)
; Š®¤ë ®è¨¡®ª „Ž‘
;
EZERO equ 0 ; No error
EINVFNC equ 1 ; Invalid function
EINVDRV equ 2 ; Invalid drive number
ENOFILE equ 3 ; File not found
ENOPATH equ 4 ; Path not found
EINVHND equ 5 ; Invalid handle
EMFILE equ 6 ; Too many open files
EEXIST equ 7 ; File already exists
EROFILE equ 8 ; File read only
EROOT equ 9 ; Root overflow
ENOSPACE equ 10 ; No free space
ENOEMPTY equ 11 ; Directory not empty
ECURDIR equ 12 ; Can't delete current directory
EINVMED equ 13 ; Invalid media
EUNOPER equ 14 ; Unknown operation (­¥¢®§¬. ®¯¥à æ¨ï)
EEXISDIR equ 15 ; Directory exist
EINVFNAM equ 16 ; Invalid filename
EINVEXE equ 17 ; Invalid EXE-file
ENSUPEXE equ 18 ; Not supported EXE-file
EACCES equ 19 ; Access denied
ENORDY equ 20 ; Not ready
ESEEK equ 21 ; Seek error
ENOSECT equ 22 ; Sector not found
ECRC equ 23 ; CRC error
EWRTPRT equ 24 ; Write protect
EREAD equ 25 ; Read error
EWRITE equ 26 ; Write error
EDRVFAIL equ 27 ; Drive failure
EEXTND28 equ 28 ; Extended error: 28
EEXTND29 equ 29 ; Extended error: 29
ENOMEM equ 30 ; Not enough memory
EINVMEM equ 31 ; Invalid memory block
EEXTND32 equ 32 ; Extended error: 32
EEXTND33 equ 33 ; Extended error: 33
EEXTND34 equ 34 ; Extended error: 34
ETMFILE equ 35 ; Too many files in directory (ᯨ᮪ ä ©«®¢)
EDEPTH equ 36 ; (᫨誮¬ ¡®«ìè ï ¢«®¦. ¯ ¯®ª ¨«¨ >= 1024 ¯ ¯®ª)
EUABORT equ 37 ; User abort (®¯¥à æ¨ï ¯à¥à¢ ­  ¯®«ì§®¢ â¥«¥¬)
EERR38 equ 38 ; 38
EERR39 equ 39 ; 39
EERR40 equ 40 ; 40
EERR41 equ 41 ; 41
EERR42 equ 42 ; 42
EERR43 equ 43 ; 43
EERR44 equ 44 ; 44
EERR45 equ 45 ; 45
EERR46 equ 46 ; 46
EERR47 equ 47 ; 47
EERR48 equ 48 ; 48
EERR49 equ 49 ; 49
EERR50 equ 50 ; 50

1003
DOS/KEYB.ASM Executable file

File diff suppressed because it is too large Load Diff

874
DOS/MOUSE.ASM Executable file
View File

@ -0,0 +1,874 @@
;===========================================================
; ‚¥ªâ®à ¬ë誨
;===========================================================
MOUSE_vector:
bit 7,c
jr nz,A32E3 ; c >=80h
inc c
dec c ; c=0 ¨­¨æ. ¬ë誨
jr z,init_mouse
dec c ; c=1 ¯®ª § âì ¬ëèªã
jr z,show_mouse
dec c ; c=2 áªàëâì ¬ëèªã
jp z,hide_mouse
dec c ; c=3 ã§­ âì á®áâ. ¬ë誨
jp z,get_mouse_status
dec c ; c=4 ãáâ. ª®®à¤¨­ âë ¬ë誨
jp z,set_mouse_coords
dec c ; c=5 § £«ã誠
jp z,A32DF
dec c ; c=6 § £«ã誠
jr z,A32DF
dec c ; c=7 ãáâ. Y £à ­¨æë ¯¥à¥¬. ¬ë誨
jp z,set_y_limit
dec c ; c=8 ãáâ. X £à ­¨æë ¯¥à¥¬. ¬ë誨
jp z,set_x_limit
dec c ; c=9 § £à㧨âì ªãàá®à ¬ë誨
jp z,A3385
dec c ; c=0Ah ãáâ. ᨬ¢®«/ âਡãâ ¬ë誨 ¤«ï ⥪áâ. ०¨¬ 
jp z,A341F
dec c ; c=0Bh ¯®«ãç¨âì ªãàá®à ¬ë誨
jp z,A33CC
dec c ; c=0Ch § £«ã誠
jr z,A32DF
dec c ; c=0Dh § £«ã誠
jr z,A32DF
dec c ; c=0Eh ¯®«ãç¨âì çã¢á⢨â. ¬ë誨
jp z,A342D
dec c ; c=0Fh ãáâ. çã¢áâ¢. ¬ë誨
jp z,A3428
A32DF: ld a,EINVFNC ; ª®¤ "­¥¢¥à­ë© ­®¬¥à ä㭪樨"
scf
ret
; c >= 80h
A32E3: res 7,c
inc c
dec c ; c=80h Ž¡à ¡®â稪  ¯¯ à â­. ¯à¥à뢠­¨ï ®â ¬ëè¨
jp z,A374B
dec c ; c=81h ¨­ä  ¤«ï ¬ë誨 ® ᬥ­¥ ०¨¬  íªà ­ 
jp z,A3700
dec c ; c=82h § £«ã誠
jr z,A32F5
dec c ; c=83h ¯à¨­ã¤. ¯¥à¥à¨á®¢ª  ¬ë誨
jp z,A3760
A32F5: ld a,EINVFNC ; ª®¤ "­¥¢¥à­ë© ­®¬¥à ä㭪樨"
scf
ret
;-----------------------------------------------------------
; ”ã­ªæ¨ï #00. ˆ­¨æ¨ «¨§ æ¨ï ¤à ©¢¥à  ¬ë誨
;-----------------------------------------------------------
init_mouse:
di
ld a,55h
out (10h),a
ld a,2Dh
out (10h),a
ld a,0
out (1Bh),a
ld a,1
out (1Bh),a
ld a,0
out (1Bh),a
ld a,3
out (1Bh),a
ld a,41h
out (1Bh),a
ld a,4
out (1Bh),a
ld a,47h
out (1Bh),a
ld a,5
out (1Bh),a
ld a,0E0h
out (1Bh),a
ei
xor a
ret
;-----------------------------------------------------------
; ”ã­ªæ¨ï #01. <20>®ª § âì 㪠§ â¥«ì ¬ë誨
;-----------------------------------------------------------
show_mouse:
push ix
push hl
push de
ex af,af'
push af
ld hl,(D378C) ; X ª®®à¤¨­ â  ¬ë誨
ld de,(D378E) ; Y ª®®à¤¨­ â  ¬ë誨
di
call A3524
ld a,true
ld (enable_mouse_cursor),a ; ä« £ ¢ë¢®¤  㪠§ â¥«ï ¬ë誨
ei
pop af
ex af,af'
pop de
pop hl
pop ix
xor a
ret
;-----------------------------------------------------------
; ”ã­ªæ¨ï #02. ‘ªàëâì 㪠§ â¥«ì ¬ë誨
;-----------------------------------------------------------
hide_mouse:
push ix
push hl
push de
ex af,af'
push af
di
xor a ; false
ld (enable_mouse_cursor),a ; ä« £ ¢ë¢®¤  㪠§ â¥«ï ¬ë誨
call A34D7
ei
pop af
ex af,af'
pop de
pop hl
pop ix
xor a
ret
;-----------------------------------------------------------
; ”ã­ªæ¨ï #03. “§­ âì á®â®ï­¨¥ ¬ë誨
; ‚®§¢à é ¥â ª®®à¤¨­ âë ¬ë誨 ¨ á®áâ®ï­¨¥ ª­®¯®ª
;-----------------------------------------------------------
get_mouse_status:
ld hl,(D378C) ; X ª®®à¤¨­ â 
ld de,(D378E) ; Y ª®®à¤¨­ â 
ld a,(D3792) ; 0 bit - «¥¢ ï, 1 bit - ¯à ¢ ï
and a
ret
;-----------------------------------------------------------
; ”ã­ªæ¨ï #04. “áâ ­®¢¨âì ª®®à¤¨­ âë 㪠§ â¥«ï ¬ë誨
; ”ã­ªæ¨ï ¯¥à¥¬¥é ¥â ªãàá®à ¢ § ¤ ­­ë¥ ª®®à¤¨­ âë
;
; ¢å®¤: hl/de = X/Y ª®®à¤¨­ âë
; ¢ë室: a = ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
;-----------------------------------------------------------
set_mouse_coords:
push ix
push hl
push de
ld (D378C),hl ; X ª®®à¤¨­ â  ¬ë誨
ld (D378E),de ; Y ª®®à¤¨­ â  ¬ë誨
ex af,af'
push af
di
call A3772
ei
pop af
ex af,af'
pop de
pop hl
pop ix
xor a ;?
ret
A3385: push bc
push de
push hl
push ix
;ld a,l
;ld (D37A6),a
;ld a,h
;ld (D37A7),a
ld (D37A6),hl; ; è¨à¨­ /¢ëá®â  áâ५ª¨ ¬ë誨
ld c,e
ld b,0
ld (D379E),bc
ld c,d
ld (D37A0),bc
exx
ld a,(D37A6) ; 10 è¨à¨­  áâ५ª¨ ¬ë誨
ld c,a
ld b,0
ld a,(D37A7) ; 14 ¢ëá®â  áâ५ª¨ ¬ë誨
ld l,b
ld h,b
add hl,bc
dec a
jr nz,$-2
push hl
ld bc,257 ;A0101 ; 257 ?
and a
sbc hl,bc
ccf
exx
pop bc
pop hl
ld a,EINVHND ; ª®¤ "­¥áãé¥áâ¢. ¤¥áªà. ä ©« "
jr c,A33C7
ld de,mouse_pointer ; 10x14 ¬ áᨢ áâ५ª¨ ¬ë誨
di
ldir
xor a ; ª®¤ "Ok"
A33C7: pop hl
pop de
pop bc
ei
ret
A33CC: push ix
exx
ld a,(D37A6) ; 10 è¨à¨­  áâ५ª¨ ¬ë誨
ld c,a
ld b,0
ld a,(D37A7) ; 14 ¢ëá®â  áâ५ª¨ ¬ë誨
ld l,b
ld h,b
add hl,bc
dec a
jr nz,$-2
push hl
ld bc,257 ;A0101 ; 257 ?
and a
sbc hl,bc
ccf
exx
pop bc
pop hl
ld a,EINVHND ; ª®¤ "­¥áãé¥áâ¢. ¤¥áªà. ä ©« "
jr c,A340B
ld de,mouse_pointer ; 10x14 ¬ áᨢ áâ५ª¨ ¬ë誨
ex de,hl
di
ldir
;ld a,(D37A6) ;@@
;ld l,a
;ld a,(D37A7)
;ld h,a
ld hl,(D37A6); ; è¨à¨­ /¢ëá®â  áâ५ª¨ ¬ë誨
;ld bc,(D379E)
;ld e,c
;ld bc,(D37A0)
;ld d,c
ld a,(D379E);
ld e,a;
ld a,(D37A0);
ld d,a;
xor a
;ld c,a
;ld b,a
A340B: ei
ret
;-----------------------------------------------------------
; ”ã­ªæ¨ï #08. “áâ ­®¢ª  £®à¨§. £à ­¨æ ¯¥à¥¬¥é¥­¨ï ¬ë誨
;
; ¢å®¤: hl = ¬¨­¨¬ «ì­ ï
; de = ¬ ªá¨¬ «ì­ ï
;-----------------------------------------------------------
set_x_limit:
ld (D3794),hl
ld (D3796),de
xor a
ret
;-----------------------------------------------------------
; ”ã­ªæ¨ï #07. “áâ ­®¢ª  ¢¥àâ. £à ­¨æ ¯¥à¥¬¥é¥­¨ï ¬ë誨
;
; ¢å®¤: hl = ¬¨­¨¬ «ì­ ï
; de = ¬ ªá¨¬ «ì­ ï
;-----------------------------------------------------------
set_y_limit:
ld (D3798),hl
ld (D379A),de
xor a
ret
A341F: ld (D37A2),hl
ld (D37A4),de
xor a
ret
A3428: ld (D379C),hl
xor a
ret
A342D: ld hl,(D379C)
xor a
ret
A3432: ld (A348B+1),hl
ld (A348E+1),de
srl d
rr e
srl d
rr e
srl d
rr e
ld d,e
srl h
rr l
srl h
rr l
srl h
rr l
ld e,l
in a,(89h)
db 0DDh
ld h,a
in a,(0A2h)
db 0DDh
ld l,a
di
ld a,54h ; ­®¬¥à áâà.
out (0A2h),a
ld a,d
add a,a
add a,a
ld l,a
ld h,43h ; áâ. à §àï¤ ?
in a,(0C9h)
rrca
and 80h
or 1
add a,e
out (89h),a
inc l
ld a,(hl)
ld bc,(D37A2)
and b
xor c
ld (hl),a
inc l
ld a,(hl)
ld bc,(D37A4)
and b
xor c
ld (hl),a
db 0DDh
ld a,l
out (0A2h),a
db 0DDh
ld a,h
out (89h),a
ret
A348B: ld hl,0
A348E: ld de,0
srl d
rr e
srl d
rr e
srl d
rr e
ld d,e
srl h
rr l
srl h
rr l
srl h
rr l
ld e,l
in a,(89h)
db 0DDh
ld h,a
in a,(0A2h)
db 0DDh
ld l,a
di
ld a,50h
out (0A2h),a
ld a,d
add a,a
add a,a
ld l,a
ld h,43h ; áâ. à §àï¤ ?
in a,(0C9h)
rrca
and 80h
or 1
add a,e
out (89h),a
inc l
ld a,(hl)
ld (hl),a
inc l
ld a,(hl)
ld (hl),a
db 0DDh
ld a,l
out (0A2h),a
db 0DDh
ld a,h
out (89h),a
ret
A34D7: ld a,0
bit 7,a
jr z,A348B
in a,(0E2h)
ld b,a
in a,(89h)
ld c,a
push bc
ld a,50h
out (0E2h),a
A34E9: ld hl,0
A34EC: ld de,0
ld a,e
ex af,af'
A34F1: ld a,0
and 1
ld de,LC000
jr z,A34FD
ld de,LC000+320
A34FD: add hl,de
A34FE: ld a,0 ; 14 á®åà. ¢ëá®â  áâ५ª¨ ¬ë誨
db 0DDh
ld h,a
ex af,af'
A3503: ld bc,10
out (89h),a
ex af,af'
ld (A3510+1),hl
ld d,h
ld e,l
ldir
A3510: ld hl,0
ex af,af'
inc a
jr z,A351B
db 0DDh
dec h
jr nz,A3503
A351B: pop bc
ld a,b
out (0E2h),a
ld a,c
out (89h),a
xor a
ret
A3524: ld a,(D378B)
ld (A34D7+1),a
bit 7,a
jp z,A3432
cp 82h ; 130
jr nz,A3537
srl h
rr l
A3537: ld ix,mouse_pointer ; 10x14 ¬ áᨢ áâ५ª¨ ¬ë誨
ld a,(D37A6) ; 10 è¨à¨­  áâ५ª¨ ¬ë誨
ld c,a
ld b,0
ld (D37AA),bc
ld (A3503+1),bc
ld c,b
ld (D37A8),bc
ld a,(D37A7) ; 14 ¢ëá®â  áâ५ª¨ ¬ë誨
ld (A34FE+1),a
ld c,a
ld b,0
ld (D37AC),bc
ld bc,(D37A0)
ld a,e
sub c
ld e,a
jr nc,A357B
neg
ld e,a
ld a,(D37A6) ; 10 è¨à¨­  áâ५ª¨ ¬ë誨
ld c,a
ld b,0
ld a,(D37A7) ; 14 ¢ëá®â  áâ५ª¨ ¬ë誨
sub e
A3571: add ix,bc
dec e
jr nz,A3571
ld c,a
ld (D37AC),bc
A357B: ld bc,(D379E)
and a
sbc hl,bc
jr nc,A359A
ld b,h
ld c,l
ld hl,0
and a
sbc hl,bc
ld (D37A8),hl
ld a,(D37A6) ; 10 è¨à¨­  áâ५ª¨ ¬ë誨
sub l
ld l,a
ld (D37AA),hl
ld hl,0
A359A: ld (A34E9+1),hl
ld (A34EC+1),de
push hl
in a,(0E2h)
ld h,a
in a,(89h)
ld l,a
ex (sp),hl
ld a,5Ch ; ¢¨¤¥®-áâà ­¨æ 
out (0E2h),a
ld a,e
ex af,af'
in a,(0C9h)
ld (A34F1+1),a
and 1
ld de,LC000
jr z,A35BE
ld de,LC000+320 ; ­ ç «® 2-£® íªà ­  ?
A35BE: add hl,de
db 0DDh
ld d,h
db 0DDh
ld e,l
ex de,hl
ld bc,(D37AC)
db 0DDh
ld h,c
ex af,af'
A35CB: ld bc,(D37A8)
add hl,bc
ld bc,(D37AA)
out (89h),a
ex af,af'
ld (A35DD+1),de
ldir
A35DD: ld de,0
ex af,af'
inc a
jr z,A35E8
db 0DDh
dec h
jr nz,A35CB
A35E8: pop bc
ld a,b
out (0E2h),a
ld a,c
out (89h),a
xor a
ret
A35F1: in a,(1Bh)
rrca
ret nc
in a,(1Ah)
ld l,a
bit 6,a
ccf
ret z
in a,(1Bh)
rrca
jr nc,$-3
in a,(1Ah)
ld e,a
bit 6,a
ccf
ret nz
in a,(1Bh)
rrca
jr nc,$-3
in a,(1Ah)
ld d,a
bit 6,a
ccf
ret nz
ld a,e
and 3Fh
ld e,a
ld a,l
and 3
rrca
rrca
or e
ld e,a
ld a,d
and 3Fh
ld d,a
ld a,l
and 0Ch
rrca
rrca
rrca
rrca
or d
ld d,a
ld a,l
rlca
rlca
rlca
res 6,a
jr nc,$+4
set 6,a
rlca
rlca
and 3
ld (D3792),a ; á®áâ. ª­®¯®ª: 0/1 bits - «¥¢ ï/¯à ¢ ï
call A36C3
;ld a,e ;@@
;ld (D3790),a
;ld a,d
;ld (D3791),a
ld (D3790),de
scf
ret
A364B: ld hl,(D378C) ; X ª®®à¤¨­ â  ¬ë誨
ld de,(D3790)
ld d,0
bit 7,e
jr nz,A366F
add hl,de
ld (D378C),hl ; X ª®®à¤¨­ â  ¬ë誨
ex de,hl
ld hl,(D3796)
and a
sbc hl,de
jr nc,A3689
ld hl,(D3796)
ld (D378C),hl ; X ª®®à¤¨­ â  ¬ë誨
jr A3689
;
A366F: ld a,e
neg
ld e,a
and a
sbc hl,de
ld (D378C),hl ; X ª®®à¤¨­ â  ¬ë誨
jr c,A3683
ld de,(D3794)
sbc hl,de
jr nc,A3689
A3683: ld hl,(D3794)
ld (D378C),hl ; X ª®®à¤¨­ â  ¬ë誨
A3689: ld hl,(D378E) ; Y ª®®à¤¨­ â  ¬ë誨
ld de,(D3791)
ld d,0
bit 7,e
jr nz,A36A9
add hl,de
ld (D378E),hl ; Y ª®®à¤¨­ â  ¬ë誨
ex de,hl
ld hl,(D379A) ; ¬ ªá. Y £à ­¨æ  ¤«ï 㪠§ â¥«ï
and a
sbc hl,de
ret nc
ld hl,(D379A) ; ¬ ªá. Y £à ­¨æ  ¤«ï 㪠§ â¥«ï
ld (D378E),hl ; Y ª®®à¤¨­ â  ¬ë誨
ret
;
A36A9: ld a,e
neg
ld e,a
and a
sbc hl,de
ld (D378E),hl ; Y ª®®à¤¨­ â  ¬ë誨
jr c,A36BC
ld de,(D3798) ; ¬¨­. Y £à ­¨æ  ¤«ï 㪠§ â¥«ï
sbc hl,de
ret nc
A36BC: ld hl,(D3798) ; ¬¨­. Y £à ­¨æ  ¤«ï 㪠§ â¥«ï
ld (D378E),hl ; Y ª®®à¤¨­ â  ¬ë誨
ret
A36C3: ld hl,(D379C)
ld a,l
or l
ret z
dec a
ret z
ld a,e
bit 7,a
ld b,0FFh
jr z,A36D6
ld b,7Fh
neg
A36D6: inc b
sub l
jr nc,A36D6
bit 7,b
jr z,A36E4
ld a,b
res 7,a
neg
ld b,a
A36E4: ld e,b
ld a,d
bit 7,a
ld b,0FFh
jr z,A36F0
ld b,7Fh
neg
A36F0: inc b
sub h
jr nc,A36F0
bit 7,b
jr z,A36FE
ld a,b
res 7,a
neg
ld b,a
A36FE: ld d,b
ret
A3700: ld (D378B),a
or a
jr z,A3720
cp 1
jr z,A3720
cp 2 ; 40x32x16 ⥪á⮢ë©
jr z,A3723
cp 3 ; 80x32x16 ⥪á⮢ë©
jr z,A3737
bit 7,a
jr z,A3720
; £à ä. ०¨¬ë íªà ­ 
;res 7,a ;@@
cp 81h ; 320x256x256
jr z,A3723
cp 82h ; 640x256x16
jr z,A3737
A3720: xor a
scf
ret
; 320x256x256 ०¨¬
A3723: ld de,319 ; ¬ ªá. X £à ­¨æ 
A3726: ld hl,0 ; ¬¨­. X/Y £à ­¨æë
call set_x_limit ; ãáâ. X £à ­¨æã ¯¥à¥¬. 㪠§ â¥«ï
ld de,255 ; ¬ ªá. Y £à ­¨æ 
jp set_y_limit ; ãáâ. Y £à ­¨æã ¯¥à¥¬. 㪠§ â¥«ï
; 640x256x16 ०¨¬
A3737: ld de,639 ; ¬ ªá. X £à ­¨æ 
jr A3726
;-----------------------------------------------------------
; ”ã­ªæ¨ï #80. Ž¡à ¡®â稪  ¯¯ à â­. ¯à¥à뢠­¨ï ®â ¬ëè¨
;
; <20>® ¯à¨å®¤ã ¯à¥à뢠­¨ï ®â ¬ëè¨ ¢ë§ë¢ ¥âáï ¤ ­­ ï äã­ªæ¨ï
; ¤à ©¢¥à . á«ãç ¥, ª®£¤  âॡã¥âáï à ¡®â  ¯®¤¯à®£à ¬¬ë
; ¯à¨ § ¯à¥é¥­­ëå ¯à¥à뢠­¨ïå, ¨á¯®«ì§ã©â¥ ¤ ­­ãî äã­ªæ¨î,
; çâ®¡ë ¨§¡¥¦ âì ¯®â¥à¨ ¯ ª¥â®¢ ¤ ­­ëå ®â ¬ëè¨.
;-----------------------------------------------------------
A374B: in a,(0E2h)
ld b,a
in a,(89h)
ld c,a
push bc
call A3772
call A3765
pop bc
ld a,b
out (0E2h),a
ld a,c
out (89h),a
ret
A3760: call A3765
and a
ret
A3765: call A35F1
ret nc
call A364B
ld a,0
ld (A3776+1),a
ret
A3772: db 3Eh ; ld a,..
enable_mouse_cursor:
db false ; ä« £ ¢ë¢®¤  㪠§ â¥«ï ¬ë誨
or a
ret z ; ­¥ ¢ë¢®¤¨âì 㪠§ â¥«ì
A3776: ld a,0
call A34D7
ld hl,(D378C) ; X ª®®à¤¨­ â  ¬ë誨
ld de,(D378E) ; Y ª®®à¤¨­ â  ¬ë誨
call A3524
ld a,-1
ld (A3776+1),a
ret
D378B: db 3
D378C: dw 160 ; X ª®®à¤¨­ â  ¬ë誨
D378E: dw 128 ; Y ª®®à¤¨­ â  ¬ë誨
D3790: db 0
D3791: db 0
D3792: db 0 ; á®áâ. ª­®¯®ª: 0/1 bits - «¥¢ ï/¯à ¢ ï
db 0; ; ­ã¦¥­ ?
;
D3794: dw 0
D3796: dw 319
D3798: dw 0 ; ¬¨­. Y £à ­¨æ  ¤«ï 㪠§ â¥«ï
D379A: dw 255 ; ¬ ªá. Y £à ­¨æ  ¤«ï 㪠§ â¥«ï
D379C: dw 0
D379E: dw 0
D37A0: dw 0
;
D37A2: dw 0FF00h
D37A4: dw 0FF77h
;
D37A6: db 10 ; è¨à¨­  áâ५ª¨ ¬ë誨
D37A7: db 14 ; ¢ëá®â  áâ५ª¨ ¬ë誨
;
D37A8: dw 0
D37AA: dw 0
D37AC: dw 0
; ‘â५ª  ¬ë誨. Œ áᨢ 10x14 ¡ ©â®¢ + 116 = 256
mouse_pointer:
db 0,0,-1,-1,-1,-1,-1,-1,-1,-1 ; 1
db 0,-2,0,-1,-1,-1,-1,-1,-1,-1 ; 2
db 0,-2,-2,0,-1,-1,-1,-1,-1,-1 ; 3
db 0,-2,-2,-2,0,-1,-1,-1,-1,-1 ; 4
db 0,-2,-2,-2,-2,0,-1,-1,-1,-1 ; 5
db 0,-2,-2,-2,-2,-2,0,-1,-1,-1 ; 6
db 0,-2,-2,-2,-2,-2,-2,0,-1,-1 ; 7
db 0,-2,-2,-2,-2,0,0,0,0,-1 ; 8
db 0,-2,-2,0,-2,0,-1,-1,-1,-1 ; 9
db 0,-2,0,0,-2,-2,0,-1,-1,-1 ; 10
db 0,0,-1,-1,0,-2,0,-1,-1,-1 ; 11
db 0,-1,-1,-1,0,-2,-2,0,-1,-1 ; 12
db -1,-1,-1,-1,-1,0,0,-1,-1,-1 ; 13
db -1,-1,-1,-1,-1,-1,-1,-1,-1,-1 ; 14
;
ds 256-140 ; 116

22
DOS/README.RUS Executable file
View File

@ -0,0 +1,22 @@
‚¥àá¨î „Ž‘ ®¡®§¢ « ª ª 1.61.
“áâ ­®¢ª : § ¬¥­¨âì ®à¨£¨­ «ì­ë© ä ©« "system.dos".
1. ˆá¯à ¢«¥­  ä¨à¬¥­­ ï ®è¨¡ª , ¯à¨ ª®â®à®© ¯à®¨á室¨«® § ¢¨á ­¨¥
á¨á⥬ë (­¥¯à¥¤áª §ã¥¬®¥ ¯®¢¥¤¥­¨¥) ¯à¨ ¯à¥¢ë襭¨¨ ¬ ªá. ç¨á« 
®âªàëâëå ¤¥áªà¨¯â®à®¢. ޤ­ ¦¤ë, ¢® ¢à¥¬¥­  ¯®àâ¨à®¢ ­¨ï M80.EXE,
¨§-§  ¤ ­­®£® ¡ £  ¨ ª®­¥ç­® ­¥ã¤ ç­®£® à á¯®«®¦¥­¨ï §¢¥§¤ ­  ­¥¡¥,
¡ë« ᭥ᥭ ¢¥áì «®£¨ç¥áª¨© ¤¨áª "C".
2. <20>®ï¢¨« áì ­®¢ ï äã­ªæ¨ï:
”ã­ªæ¨ï #08 (DSS_RESCAN). <20>¥à¥áª ­¨à®¢ âì ¤¥¢ ©áë á¨á⥬ë.
¢å®¤: ­¥â
¢ë室: A - ­®¬¥à ¯®á«¥¤­¥£® «®£. ¤¨áª  ¢ á¨á⥬¥
<EFBFBD>।­ §­ ç¥­  ¤«ï á®§¤ â¥«¥© RAM-¤¨áª®¢. „«ï ¤®áâ㯠 ª á®§¤ ­­®¬ã
RAM-¤¨áªã ­¥ ­ã¦­® ¯¥à¥§ £à㦠âì ª®¬¯ìîâ¥à.
3. ®â«¨ç¨¨ ®â ®à¨£¨­ « , ä㭪樨 0Ah/0Bh (Create file/New create file)
¯¥à¥¤ á®§¤ ­¨¥¬ ä ©«  ¯à®¢¥àïîâ ­  ¯¥à¥¯®«­¥­¨¥ â ¡«¨æã ᢮¡®¤­ëå
¤¥áªà¨¯â®à®¢.

BIN
DOS/SYSTEM.DOS Executable file

Binary file not shown.

12
DOS/pr.bat Executable file
View File

@ -0,0 +1,12 @@
@echo off
..\asmplus.exe dos.asm SYSTEM.DOS
if errorlevel 1 goto ERR
echo Ok!
goto END
:ERR
del system.dos
echo ®è¨¡ª¨ ª®¬¯¨«ï樨...
:END
del dos.lst

1
DOS/readme.! Executable file
View File

@ -0,0 +1 @@
<EFBFBD>ਠᮧ¤ ­¨¨ ä ©« , ¯ ¯ª¨ ¨ ¤à. ®¯¥à æ¨© á ¯ã⥬ (¤¨áª®¬) - „Ž‘ ¬¥­ï¥â ⥪ã騩 ¯ãâì !!!.

View File

@ -25,6 +25,24 @@ PCHARS:
INC HL
OR A
RET Z
;!TEST FOR LP_PR_LINE_DIR
;PUSH HL
;CALL CURSOR
;LD (.CHAR),A
;LD A,(SLOT1)
;PUSH AF
;LD A,(SLOT0)
;LD (SLOT1),A
;LD HL,.CHAR + #4000
;LD BC,0*256 + BIOS.LP_PR_LINE_DIR
;RST ToBIOS
;POP AF
;LD (SLOT1),A
;POP HL
;JP .loop
;
CALL PUTCHAR
;!TEST CR+LF+SCROLL
;CALL CURSOR
@ -33,12 +51,18 @@ PCHARS:
;CALL Z,PUTCHAR.LFF
;
JP .loop
;.CHAR: DZ " ",0
; PRINT CHAR
; A - CHAR
PUTCHAR:
;CP ' '
;JR NC,.CHAR
;LD B,A
;CALL CURSOR
;LD A,B
;CP ' '
;JR NC,.CHAR
CP #0D
JR Z,.CR_
CP #0A
@ -49,8 +73,8 @@ PUTCHAR:
JR Z,.BK_
CP #07
JR Z,.BELL
;SCF
;RET
;SCF
;RET
.CHAR: LD BC,1*256 + BIOS.LP_PRINT_SYM
;!TEST CR+LF+SCROLL
;JP ToBIOS
@ -60,6 +84,12 @@ PUTCHAR:
LD A,D
OR E
RET NZ
;LD A,D ; ¢ DE ª®®à¤¨­ âë ⥪ã饣® §­ ª®¬¥áâ 
;XOR E ; <20>஢¥à塞 ­  ª®®à¤¨­ âë #1F:#4F
;XOR #50
;RET NZ ; ¥á«¨ ¤à㣨¥ - â® ¢ë室
;LD E,A
;CALL LOCATE
;
.LFF: PUSH HL ;!FIXIT á®åà ­ïâì ⥪ã騥 ¯à¥à뢠­¨ï
;PUSH DE

View File

@ -1 +1 @@
173
187

View File

@ -11,7 +11,7 @@
DEFINE NeedSafePort_Y 1
DEFINE TABisSPACES 0
DEFINE EnoughtOnly_LF 0
DEFINE CLASSIC_CURSOR 1
DEFINE CLASSIC_CURSOR 0
DEFINE SAVE_PATH_MACRO 0
DEFINE MINIMUM_BIOS_VERSION 2*256 + 55 ; version 2.55
;

463
SHELL/BATCH.ASM Normal file
View File

@ -0,0 +1,463 @@
; Ž¡à ¡®âª  BAT-ä ©«®¢
;
;fhandle
BAT_FM: db 0 ; ¤¥áªà. bat-ä ©« 
;count: db 0 ; ç¨á«® ¯à®ç¨â. ¡ ©â ¨§ ä ©« 
; ä« £ echo-०¨¬ 
echo_mode:
db true ; 1/0 on/off
; ¡ãä¥à bat-ä ©« 
;T98B9: ds 256
;-------------------------------------------------
; ‡ ¯ã᪠bat-ä ©« 
; ¢å®¤: hl=¨¬ï ä ©« 
;-------------------------------------------------
A83E8: call BATCH
jp c,A83DD ; ®è¨¡ª  ®âªà. ä ©«  (cpp.asm)
ret
; ¢å®¤: b=ç¨á«® á«®¢ "ZERO".."NINE"
MAKE_BATCH_PRM_ARRAY:
dec hl
.loop: inc hl
ld a,(hl)
or a
ret z
cp " "
jr z,.loop
cp 9 ; Tab
jr z,.loop
ex de,hl
ld (hl),e
inc hl
ld (hl),d
inc hl
ex de,hl
.B_FIND_SPACE:
inc hl
ld a,(hl)
cp " "+1
jr nc,.B_FIND_SPACE
ld (hl),0
or a
ret z
djnz .loop
ret
;-------------------------------------------------
; ‡ £à㧪  ¨ ¢ë¯®«­¥­¨¥ BAT-ä ©« 
; ¢å®¤: hl=¨¬ï ä ©« 
; ¢ë室: "CF" - ®è¨¡ª  ®âªà. ä ©« 
;-------------------------------------------------
BATCH: push hl ; á®åà. ¨¬ï bat-ä ©« 
ld de,work_buffer ; 512 ¬¥áâ­ë© ¡ãä¥à
call copy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬)
ld hl,work_buffer ; 512 ¬¥áâ­ë© ¡ãä¥à
ld de,BAT_PRM_ARRAY ; â ¡«¨æ  㪠§ â. ­  "ZERO".."NINE"
ld b,BAT_PRM_ARRAY.TOTAL ; ç¨á«® á«®¢ "ZERO".."NINE"
call MAKE_BATCH_PRM_ARRAY
jr nz,.B_ALL_P
ld hl,NULL ; ds 2*10
ex de,hl
.B_CLR_P:
ld (hl),e
inc hl
ld (hl),d
inc hl
djnz .B_CLR_P
ex de,hl
.B_ALL_P:
pop hl ; ¢®ááâ. ¨¬ï bat-ä ©« 
ld a,Dss.Open.R ; ­  ç⥭¨¥
ld c,Dss.Open ; ®âªàëâì ä ©«
RST ToDSS
push af ; á®åà. ª®¤ ®è¨¡ª¨
call c,restore_disk_path ; ¢®ááâ. ⥪. ¤¨áª ¨ ¯ãâì
;R10
CALL Restore_Screen
;R10
pop af
ret c
ld (BAT_FM),a ; ¤¥áªà. bat-ä ©« 
; ¢ë¯®«­. ª®¬ ­¤ bat-ä ©« 
call NEWLINE
xor a
ret
;---------------------------------------------------
; ‚믮«­¥­¨¥ ª®¬ ­¤ BAT-ä ©« 
;---------------------------------------------------
NEWLINE:
ld de,struct_input_line+5 ;!HARDCODE
.ADDBAT: push de
call READBAT ; ¯à®ç¨â âì 128 ¡ ©â ¨§ ä ©«  ¢ "work_buffer1"
pop de
or a ; a=ç¨á«® ¯à®ç¨â. ¡ ©â
jr nz,.BATLINE
ex de,hl
;ld de,T96AE ;;256 ¡ãä¥à (inline.asm)
ld de,struct_input_line+5
sbc hl,de
jr z,.exit; ;[x] Vasil, ã¡à ­ ¡ £ á ­¥§ ªàëâë¬ BAT-ä ©«®¬
ld a,l
ld (struct_input_line+4),a ; ¤«¨­  áâப¨
call CMDMODE ; â¥áâ ­  bat-ª®¬ ­¤ë "rem","pause"
.exit: ld a,(BAT_FM) ; ¤¥áªà. bat-ä ©« 
ld c,Dss.Close ; § ªàëâì ä ©«
RST ToDSS
ret
;
.BATLINE:
;ld hl,T99B9 ; ®âªã¤ , 128 ¡ãä¥à (ccp.asm) "work_buffer1"
ld hl,work_buffer1
.loop: call MOVWORD ; ᪮¯¨à. work_buffer1 -> struct_input_line+5
jr c,.ADDBAT
ld a,b
ld (MOVWORD.count),a ; ®áâ «®áì ¯à®¯ àá¨âì ¯à®ç¨â ­­ëå ¡ ©â®¢
push hl
ex de,hl
;ld de,T96AE ;;256 ¡ãä¥à (inline.asm)
ld de,struct_input_line+5
;ld de,work_buffer+256;;
sbc hl,de
ld a,l
;ld (D96AD),a ;; ¤«¨­  áâப¨ (inline.asm)
ld (struct_input_line+4),a ; ¤«¨­  áâப¨
call CMDMODE ; â¥áâ ­  bat-ª®¬ ­¤ë "rem","pause"
;ld de,T96AE ;;256 ¡ãä¥à (inline.asm)
ld de,struct_input_line+5
;ld de,work_buffer+256;;
pop hl
jr .loop
;-------------------------------------------------
; —⥭¨¥ ¤ ­­ëå (hl) -> (de), ¯à¨ ­¥®¡å®¤¨¬®áâ¨
; ¯®¤ª çª  ¨§ ä ©« .
;
; ¢å®¤: hl=®âªã¤ 
; de=ªã¤ 
;-------------------------------------------------
MOVWORD:
.count+1: ld a,0 ; (ç¨á«® ¯à®ç¨â. ¡ ©â ¨§ ä ©« )/128
ld b,a
.loop: ld a,(hl)
ld (de),a
cp " "
jr c,.loop2
inc hl
inc de
djnz .loop
scf
ret
; ¯à®ç¨â âì ¤®¯. ¡«®ª ¨§ ä ©« 
.loop2: ld a,(hl)
cp " "
ret nc
inc hl
djnz .loop2
push de
call READBAT ; ¯à®ç¨â âì 128 ¡ ©â ¨§ ä ©« 
pop de
;ld hl,BATBUFF ; 128 ¡ãä¥à (ccp.asm) "work_buffer1"
ld hl,work_buffer1
ld b,a ; ç¨á«® ¯à®ç¨â. ¡ ©â
or a
jr nz,.loop2
scf
ret
; ¯à®ç¨â âì 128 ¡ ©â ¨§ ä ©« 
READBAT:
;ld hl,T99B9 ; 128 ¡ãä¥à ¯®¤ ¤ ­­ë¥ (ccp.asm) "work_buffer1"
ld hl,work_buffer1
ld de,128 ; ᪮«ìª®
ld a,(BAT_FM) ; ¤¥áªà. bat-ä ©« 
ld c,Dss.Read ; ç⥭¨¥ ä ©« 
RST ToDSS
ld a,e
ld (MOVWORD.count),a ; (ç¨á«® ¯à®ç¨â. ¡ ©â ¨§ ä ©« )/128
ret
; ’¥áâ ­  bat-ª®¬ ­¤ë "rem","pause"
CMDMODE:
;xor a
;ld (D96A6),a ; (inline.asm)
call EVALCMD ; (batch.asm)
;ld ix,T96AC ; ­ã¦­®?? § ª®¬¥­â à¨« (inline.asm)
;ld hl,T96AE ;;256 ¡ãä¥à (inline.asm)
ld hl,struct_input_line+5
;ld hl,work_buffer+256;;
ld a,(hl)
cp "@" ; 40h
jr nz,A8240
dec hl
;ld hl,struct_input_line+4;;
dec (hl)
jr z,A825B
ld c,(hl) ; ¤«¨­  áâப¨
inc hl
ld b,0
;ld hl,work_buffer+256;;
ld d,h
ld e,l
inc hl
ldir
jr A825B
;
A8240: ld a,(echo_mode) ; ä« £ echo-०¨¬ 
or a
jr z,A825B ; off
; ¢ë¢¥á⨠á¨áâ. ¯ãâì ¨ áâபã ᮤ¥à¦¨¬®£® bat-ä ©« 
;ld de,T96AE ;;256 ¡ãä¥à (inline.asm)
;ld de,struct_input_line+5
;call A95DE ; ¢ë¢®¤ íªà ­. ¯ã⨠á ">" (inline.asm)
; ¢ë¢¥á⨠íªà ­. ¯ãâì ¨ ¢¢¥¤. ª®¬ ­¤ã
ld c,BIOS.LP_GET_PLACE ; ã§­ âì ¯®«®¦. ªãàá®à 
RST ToBIOS
ld (YXpos),de ; Y/X ­ ç «® ª®¬-áâப¨
ld (cursor_position),de ; Y/X ¯®§¨æ¨ï ªãàá®à 
call print_compath ; ¢ë¢¥á⨠¯ãâì + ­®¢ ï è¨à¨­  ¯®«ï ¢¢®¤ 
ld de,(YXpos) ; Y/X ­ ç «® ª®¬-áâப¨
ld c,Dss.Locate ; ãáâ. ¯®«®¦. ªãàá®à 
RST ToDSS
;ld hl,work_buffer+256;;
ld hl,struct_input_line+4 ; ¤«¨­  áâப¨
ld a,(hl)
ld b,a
inc hl ;+5
push bc
ld c,BIOS.LP_PRINT_LINE2 ; ¢ë¢®¤ áâப¨ ¡¥§  âਡã⮢
RST ToBIOS
pop bc ; b=¤«¨­  áâப¨
ld a,(width_inpline) ; è¨à¨­  ¯®«ï ¢¢®¤  (76..48)
sub b
ei
ret z ; ¯à ¢ë© ªà © íªà ­ 
jr c,A8250; ; áâப  ¡®«ìè¥ è¨à¨­ë íªà ­ 
; § ¯®«­¨âì áâப㠤® ª®­æ  íªà ­ 
dec a ; çâ®¡ë ­¥ áà ¡®â « áªà®««¨­£ íªà ­  ;!FIXIT scroll
ld b,a ; ç¨á«® ¢ë¢®¤. ᨬ¢®«®¢
ld a," " ; ᨬ¢®«
ld c,BIOS.LP_PRINT_SYM ; ¢ë¢®¤ ᨬ¢®«  ¡¥§  âਡãâ 
RST ToBIOS
ei
;!TEST
A8250: call newline
;
;
;ld a,(D96AD) ;; ¤«¨­  áâப¨ (inline.asm)
;ld a,(struct_input_line+4);-
;or a
;ret z
;call newline
;jr A8264
;
A825B: ;ld a,(D96AD) ;; ¤«¨­  áâப¨ (inline.asm)
ld a,(struct_input_line+4)
or a
ret z
;A8264: ld hl,T96AE ;;256 ¡ãä¥à (inline.asm)
;ld hl,struct_input_line+5
;dec hl
; ã¡à âì ª®­æ¥¢ë¥ ¯à®¡¥«ë áâப¨
ld hl,struct_input_line+4
ld c,(hl) ; hl=¤«¨­  áâப¨ (inline.asm)
ld b,0
inc hl
;ld hl,work_buffer+256;;
A826C: ld a,(hl)
cp " "
jr nz,A8276
inc hl
dec c
jr nz,A826C
ret
;
A8276: ld d,h
ld e,l
add hl,bc
ld (hl),b ; 0 ¢ ª®­¥æ áâப¨ (¯¥à¢®£® ª®­æ. ¯à®¡¥« )
sbc hl,bc
ld a,c
ex af,af'
ld a," "
cpir
jr nz,A8286
inc c
A8286: ex af,af'
sub c
ld c,a ; ¤«¨­  á«®¢  ¨«¨ áâப¨ ?
ld hl,BATLIST ; ª®¬ ­¤ë "pause","rem" + dos-ª®¬ ­¤ë
; de=struct_input_line+5, c=¤«¨­  áâப¨ (¡¥§ ª®­æ. ¯à®¡¥«®¢)
; ¢ë¯®«­. ª®¬ ­¤ã ¨«¨ § ¯ãáâ¨âì ä ©«
jp A8312
; ¤®«¦­  ã¡à âì ª®­æ. ¯à®¡¥«ë ¨ ãáâ. ¤«¨­ã áâப¨, ¥á«¨ ã१ « áì
EVALCMD: xor a
ld hl,struct_input_line+4 ;!HARDCODE
ld c,(hl)
ld b,a
inc hl
add hl,bc
ld (hl),a ; 0 ¢ ª®­¥æ áâப¨
sbc hl,bc
ld de,work_buffer2 ; 256 ¡ãä¥à
call EVALSTR
ld hl,work_buffer2 ;work_buffer+256
ld de,struct_input_line+5 ; ªã¤ 
ld bc,255
.loop: ld a,(hl)
ldi
inc b
or a
jr nz,.loop
dec b
ld a,b
ld (struct_input_line+4),a ; ¤«¨­  áâப¨ (edline.asm)
and a
ret
; HL - STRING WITH %VAR%
EVALSTR: ld a,(hl)
cp "%"
jr z,.TVARIABLE
.VARL1: ldi
or a
jr nz,EVALSTR
ld bc,0
ld (.TVAR_PNT),bc
ret
;
.TVARIABLE:
.TVAR_PNT+1: ld bc,0
ld a,b
or c
ld a,"%"
ld (.TVAR_PNT),de
jr nz,.TVAR1
inc hl
ld a,(hl)
cp "9"+1
jr c,.TVAR0
.TVAR2: ld a,"%" ; > "9"
dec hl
jp .VARL1
.TVAR0: cp "0"
jr c,.TVAR2 ; < "0"
; BATCH PARAM %0, %1, %2 ...
inc hl
push hl
ld (.TVAR_PNT),bc
sub "0"
add a,a
ld c,a
ld hl,BAT_PRM_ARRAY ; â ¡«¨æ  㪠§ â. ­  "ZERO".."NINE"
add hl,bc
ld a,(hl)
inc hl
ld h,(hl)
ld l,a
or h
jr z,.NOBTP ; NO BATCH PARM
call copy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬)
dec de
.NOBTP: pop hl
jp EVALSTR
;
.TVAR1: push hl
ld h,d
ld l,e
dec hl
and a
sbc hl,bc
jr z,.TNOVAR
ld a,"="
ld (de),a
inc de
xor a
ld (de),a
ld d,b ; de=¡ãä¥à §­ ç¥­¨ï ¯¥à¥¬.
ld e,c
ld h,b ; hl=¨¬ï ¯¥à¥¬.
ld l,c
inc hl
ld bc,Dss.Environ.Get*256 + Dss.Environ ; ¯®«ãç¨âì ¯¥à¥¬. ®ªà㦥­¨ï
RST ToDSS
.TNOVAR: pop hl
inc hl
ld bc,0
ld (.TVAR_PNT),bc
jp EVALSTR
; !! <09>¥ ¤¥« âì ®¤­ã ª®¬ ­¤ã > 256 ᨬ¢®«®¢)) !!
;
; BAT-ª®¬ ­¤ë (­¥ ®â¤¥«ïâì ®â ¤®á-ª®¬ ­¤)
BATLIST: DZ 'PAUSE' : DW cmd_pause ;CPAUSE
DZ 'REM' : DW cmd_rem ;CREM
;
; DSS-ª®¬ ­¤ë
CMDLIST: DZ 'CD' : DW cmd_chdir ;CCHDIR
DZ 'DIR' : DW cmd_dir ;DIR
DZ 'ECHO' : DW cmd_echo ;CECHO
DZ 'ECHO.' : DW cmd_echoLN
DZ 'PATH' : DW cmd_path ;CPATH
DZ 'MD' : DW cmd_mkdir ;CMKDIR
DZ 'REN' : DW cmd_rename ;CRENAM
DZ 'DEL' : DW cmd_del ;CDELET
DZ 'RD' : DW cmd_rmdir ;CRMDIR
DZ 'SET' : DW cmd_set ;CSET
DZ 'TIME' : DW cmd_time ;CTIME
DZ 'DATE' : DW cmd_date ;CDATE
DZ 'VER' : DW cmd_version ;VERS
DZ 'CLS' : DW cmd_cls ;CLS
DZ 'CHDIR' : DW cmd_chdir ;CCHDIR
DZ 'MKDIR' : DW cmd_mkdir ;CMKDIR
DZ 'RENAME' : DW cmd_rename ;CRENAM
DZ 'ERASE' : DW cmd_del ;CDELET
DZ 'RMDIR' : DW cmd_rmdir ;CRMDIR
DZ 'HELP' : DW cmd_help ;HELP
DZ 'VERSION' : DW cmd_version ;VERS
DZ 'EXIT' : DW cmd_exit ;CEXIT
DZ 'REBOOT' : DW cmd_reboot ;REBOOT
DB #00
IZERO DB "ZERO",0
IONE DB "ONE",0
ITWO DB "TWO",0
ITHREE DB "THREE",0
IFOUR DB "FOUR",0
IFIVE DB "FIVE",0
ISIX DB "SIX",0
ISEVEN DB "SEVEN",0
IEIGHT DB "EIGHT",0
ININE DB "NINE",0
BAT_PRM_ARRAY:
DW IZERO, IONE, ITWO, ITHREE, IFOUR, IFIVE, ISIX, ISEVEN, IEIGHT, ININE
DW 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; 10 ç¨á«® á«®¢ "ZERO".."NINE"
.TOTAL EQU ($-BAT_PRM_ARRAY)/4
DISPLAY "First compilation test: 10 = ",/D, BAT_PRM_ARRAY.TOTAL
ASSERT BAT_PRM_ARRAY.TOTAL = 10, "BAT_PRM_ARRAY.TOTAL"
NULL: DB 0
;TVAR_PNT: DW 0

39
SHELL/Commands/CHDIR.ASM Normal file
View File

@ -0,0 +1,39 @@
;///////////////////////////////////////////////////
;
; CD, CHDIR. ‘¬¥­  ª â «®£ 
;
;///////////////////////////////////////////////////
cmd_chdir:
ex de,hl
;ld de,T9186 ; ¡ãä¥à
ld de,work_buffer1;
ld c,Dss.GSwitch ; ¢ë¤¥«¨âì ¯ à ¬¥âà ª®¬-áâப¨
RST ToDSS
xor a
;ld hl,T9186
ld hl,work_buffer1;
cp (hl)
jr nz,A877B
ld (hl),"." ; ".." த¨â. ¯ ¯ª 
inc hl
ld (hl),"."
inc hl
ld (hl),0
dec hl
dec hl
A877B: ld c,Dss.ChDir ; ᬥ­¨âì ⥪. ª â «®£
RST ToDSS
;call c,print_err_message
jp c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï
; call newline
jp save_disk_path ; á®åà. ⥪. ¤¨áª ¨ ¯ãâì
; ; ¢ë¢®¤ á¨áâ. ¯ã⨠­  íªà ­
; ld c,8Eh ; ã§­ âì ¯®«®¦. ªãàá®à 
; RST ToBIOS
; ld (YXpos),de ; Y/X ­ ç «® ª®¬-áâப¨
; ld (cursor_position),de ; Y/X ¯®§¨æ¨ï ªãàá®à 
; ;call print_compath ; ¢ë¢¥á⨠¯ãâì + ­®¢ ï è¨à¨­  ¯®«ï ¢¢®¤ 
; ;ld de,(YXpos) ; Y/X ­ ç «® ª®¬-áâப¨
; ;ld c,84h ; ãáâ. ¯®«®¦. ªãàá®à 
; ;RST ToBIOS
; ret

66
SHELL/Commands/CLS.ASM Normal file
View File

@ -0,0 +1,66 @@
;///////////////////////////////////////////////////
;
; CLS. Žç¨áâ¨âì íªà ­
;
; Œ®¦­® § ¤ âì ®¤¨­  à£ã¬¥­â - 梥â íªà ­ .
; …᫨  à£ã¬¥­â ­¥ § ¤ ­, ¨á¯. ¯®-㬮«ç ­¨î #07.
;///////////////////////////////////////////////////
cmd_cls:ex de,hl ; hl=ª®¬-áâப 
;ld de,T9186 ; ¡ãä¥à ¯®¤ ¯ à ¬¥âà
ld de,work_buffer1;
push de
ld c,Dss.GSwitch ; ¢ë¤¥«¨âì ¯ à ¬¥âà ª®¬-áâப¨
RST ToDSS
pop hl
jp nc,invalid_param ; "Invalid parametr" (>1 ¯ à ¬.)
ld b,7 ;  âਡãâ ®ç¨á⪨ ¯®-㬮«ç ­¨î
ld a,(hl)
or a
jr z,cls_clear
call ascii2byte
jp c,invalid_param ; "Invalid parametr"
and 7
ld b,a
inc hl
ld a,(hl)
or a
jr z,cls_clear
ld a,b
rlca
rlca
rlca
rlca
ld b,a
ld a,(hl)
call ascii2byte
jp c,invalid_param ; "Invalid parametr"
or b
ld b,a
cls_clear:
ld a,b
ld (color_screen),a ;  âਡãâ
ld de,0 ; Y/X ¯®«®¦.
ld hl,#2050 ; Y/X à §¬¥à
ld c,BIOS.LP_CLS_WIN ; ®ç¨áâ¨âì ®ª­® (¢ë¢®¤®¬ ¯à®¡¥«®¢)
RST ToBIOS
; ãáâ. ªãàá®à ¢ Home
ld de,0 ; Y/X ¯®«®¦.
ld c,Dss.Locate
RST ToDSS
ret
; ascii -> int
ascii2byte:
cp "0"
ret c
cp "9"+1
jr c,$+10
and 5Fh
cp "F"+1
ccf
ret c
sub 7
sub "0"
or a
ret

152
SHELL/Commands/DATE.ASM Normal file
View File

@ -0,0 +1,152 @@
; Ž¡à ¡®â稪¨ ª®¬ ­¤ DATE ¨ TIME
;
;///////////////////////////////////////////////////
;
; DATE. ‚뢮¤ ¨«¨ ãáâ ­®¢ª  ¤ âë
;
;///////////////////////////////////////////////////
cmd_date:
ex de,hl ; hl=ª®¬-áâப 
;ld de,T9186 ; ¡ãä¥à
ld de,work_buffer1;
ld c,Dss.GSwitch ; ¢ë¤¥«¨âì ¯ à ¬¥âà ª®¬-áâப¨
RST ToDSS
;ld de,T9186
ld de,work_buffer1;
ld a,(de)
or a
jr z,cmd_dt1
call A893C
jp c,invalid_param ; "Invalid parametr"
xor a
cp h
jp nz,invalid_param ; "Invalid parametr"
ld a,31
cp l
jp c,invalid_param ; "Invalid parametr"
ld b,l
push bc
call A893C
pop bc
jp c,invalid_param ; "Invalid parametr"
xor a
cp h
jp nz,invalid_param ; "Invalid parametr"
ld a,12
cp l
jp c,invalid_param ; "Invalid parametr"
ld c,l
push bc
call A893C
push hl
ld c,Dss.SysTime
RST ToDSS
pop ix
pop de
ld c,Dss.SetTime
RST ToDSS
cmd_dt1:ld c,Dss.SysTime
RST ToDSS
push ix
push de
ld a,d ; ç¨á«®
ld hl,PRM1 ; ªã¤ 
call A8913 ; ¤¥áïâ. ¢ë¢®¤ ¢ ¡ãä¥à
ld a,"."
ld (hl),a
inc hl
pop de
ld a,e ; ç¨á«®
call A8913 ; ¤¥áïâ. ¢ë¢®¤ ¢ ¡ãä¥à
ld a,"."
ld (hl),a
inc hl
push hl
pop ix
pop hl
call A8964
ld de,2 ; ¨­¤¥ªá "Current date: %1"
jp MESSAGE ; ¢ë¢¥á⨠áâபã
;///////////////////////////////////////////////////
;
; TIME. ‚뢮¤ ¨«¨ ãáâ ­®¢ª  ¢à¥¬¥­¨
;
;///////////////////////////////////////////////////
cmd_time:
ex de,hl
;ld de,T9186
ld de,work_buffer1;
ld c,Dss.GSwitch
RST ToDSS
;ld de,T9186
ld de,work_buffer1;
ld a,(de)
or a
jr z,cmd_tm1
call A893C
jp c,invalid_param ; "Invalid parametr"
xor a
cp h
jp nz,invalid_param ; "Invalid parametr"
ld a,23
cp l
jp c,invalid_param ; "Invalid parametr"
ld b,l
push bc
call A893C
pop bc
jp c,invalid_param ; "Invalid parametr"
xor a
cp h
jp nz,invalid_param ; "Invalid parametr"
ld a,59
cp l
jp c,invalid_param ; "Invalid parametr"
ld c,l
push bc
call A893C
pop bc
jp c,invalid_param ; "Invalid parametr"
xor a
cp h
jp nz,invalid_param ; "Invalid parametr"
ld a,59
cp l
jp c,invalid_param ; "Invalid parametr"
push bc
ld a,l
push af
ld c,Dss.SysTime
RST ToDSS
pop bc
pop hl
ld c,Dss.SetTime
RST ToDSS
cmd_tm1:ld c,Dss.SysTime
RST ToDSS
push bc
push hl
ld a,h ; ç¨á«®
ld hl,PRM1 ; ªã¤ 
call A8913 ; ¤¥áïâ. ¢ë¢®¤ ¢ ¡ãä¥à
ld a,":"
ld (hl),a
inc hl
pop de
ld a,e ; ç¨á«®
call A8913 ; ¤¥áïâ. ¢ë¢®¤ ¢ ¡ãä¥à
ld a,":"
ld (hl),a
inc hl
pop af ; ç¨á«®
call A8913 ; ¤¥áïâ. ¢ë¢®¤ ¢ ¡ãä¥à
xor a
ld (hl),a ; ¢ ª®­¥æ áâப¨
ld de,3 ; ¨­¤¥ªá "Current time: %1"
jp MESSAGE ; ¢ë¢¥á⨠áâபã

16
SHELL/Commands/DEL.ASM Normal file
View File

@ -0,0 +1,16 @@
;///////////////////////////////////////////////////
;
; DEL, ERASE. “¤ «¨âì ä ©«
;
;///////////////////////////////////////////////////
cmd_del:ex de,hl
;ld de,T9186
ld de,work_buffer1;
ld c,Dss.GSwitch
RST ToDSS
;ld hl,T9186
ld hl,work_buffer1;
ld c,Dss.Delete
RST ToDSS
call c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï
ret

555
SHELL/Commands/DIR.ASM Normal file
View File

@ -0,0 +1,555 @@
;///////////////////////////////////////////////////
;
; DIR. ‚뢮¤ ᯨ᪠ ä ©«®¢ ¨ ¯ ¯®ª
;
;///////////////////////////////////////////////////
cmd_dir: push de
ld c,Dss.CurDisk ; ã§­ âì ⥪. ¤¨áª
RST ToDSS
ld (disk+1),a ; ­®¬¥à ¤¨áª 
call read_disk_info ; ¯à®ç¨â âì ¬¥âªã ¨ á¥à¨©­ë© ­®¬¥à ¤¨áª 
pop de
ld hl,0
ld (D88DC),hl
ld (D88DE),hl
ld (D88E0),hl
ex de,hl
ld a,(hl)
or a
jr nz,$+5 ; § ¤ ­  ¬ áª  ¨¬¥­
ld hl,mask_fname ; "*.*"
;ld de,T9186 ; ¡ãä¥à
ld de,work_buffer1 ; 80
ld c,Dss.GSwitch ; ¢ë¤¥«¨âì ¯ à ¬¥âà ª®¬-áâப¨
RST ToDSS
;ld hl,T9186 ; ¨¬ï ä ©« 
;ld de,T9186 ; ¡ãä¥à
ld hl,work_buffer1 ; ¨¬ï ä ©« 
ld de,work_buffer1 ; 80 ¡ãä¥à
ld a,37h ;  âਡãâ (¢á¥, ªà®¬¥ ¬¥âª¨ ⮬ )
ld bc,0*256 + Dss.F_First ; f_first (ä®à¬ â 11)
RST ToDSS
jp c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï
; %1
;ld a,(system_path) ; ¡ãä¥à ¯®«­®£® á¨áâ. ¯ãâ¨
;ld (T90F6),a
;ld a,":"
;ld (T90F7),a
;xor a
;ld (T90F8),a
ld a,(screen_path) ; ¤¨áª
ld hl,PRM1
ld (hl),a
inc hl
ld (hl),":"
inc hl
ld (hl),0
; %2
ld hl,serial_string ; áâப  á¥à¨©­®£® ­®¬¥à  ¤¨áª 
ld de,PRM2 ; ªã¤ 
call ncopy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬)
;call print_sys_path ; ¢ë¢®¤ á¨áâ. ¯ã⨠­  íªà ­
; %3
ld hl,screen_path ; íªà ­. ¯ãâì
ld de,PRM3 ; 16 ¡ãä¥à
;ld a,(hl)
;ldi ; ᪮¯¨à. áâபã
;or a
;jr nz,$-4
call copy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬)
;
ld de,0 ; ¨­¤¥ªá "Volume in drive %1 has no label..."
call MESSAGE ; ¢ë¢¥á⨠áâபã
; 横« ¢ë¢®¤  ᯨ᪠ ä ©«®¢/¯ ¯®ª
A882C: ;ld hl,T9186 ; à ¡. ¡ãä¥à
ld hl,work_buffer1 ; 80
ld de,33
add hl,de
call A88E2
;ld ix,T9186
ld ix,work_buffer1 ; 80
ld a,(ix+32) ;  âਡãâ ⥪. § ¯¨á¨
and 10h ; ¯ ¯ª  ?
jr nz,A8866 ; ¤ 
; ¯à¨¡ ¢¨âì à §¬¥à ⥪. ä ©« 
ld hl,(D88DC)
inc hl
ld (D88DC),hl
ld e,(ix+30)
ld d,(ix+31)
ld hl,(D88E0)
exx
ld e,(ix+28)
ld d,(ix+29)
ld hl,(D88DE)
add hl,de
exx
adc hl,de
exx
ld (D88DE),hl
exx
ld (D88E0),hl
A8866: ;ld de,T9186 ; à ¡. ¡ãä¥à
ld de,work_buffer1 ; 80 ¡ãä¥à
ld c,Dss.F_Next ; ¯®¨áª á«¥¤.
RST ToDSS
jr nc,A882C ; ­ § ¤ ¢ 横«
jr A8872 ; ª®­¥æ ᯨ᪠, ­  ¤¥áïâ. ¢ë¢®¤
; „¥áïâ¨ç­ë© ¢ë¢®¤
A8872: ld hl,(D88DC)
ld ix,PRM1 ; ¡ãä¥à
call A8964
ld hl,(D88DE) ; ¬«. à §àï¤
exx
ld hl,(D88E0) ; áâ. à §àï¤
exx
call A8A8F ; ¤¥áïâ¨ç­ë© 32-å à §àï¤­ë© ¢ë¢®¤
ld hl,T8B37 ; "0"
ld a,(hl)
cp " "
jr nz,A8892
ld a,"0"
ld (hl),a
A8892: ld de,T8B46 ; "0 000 000 000"
ld hl,T8B2E ; "0000000000"
ld a,(hl)
ldi
cp " "
jr z,$+4
ld a,"," ; à §¤. à §à冷¢
ld (de),a
inc de
ldi
ldi
ld a,(hl)
ldi
cp " "
jr z,$+4
ld a,"," ; à §¤. à §à冷¢
ld (de),a
inc de
ldi
ldi
ld a,(hl)
ldi
cp " "
jr z,$+4
ld a,"," ; à §¤. à §à冷¢
ld (de),a
inc de
ldi
ldi
ldi
ld hl,T8B46 ; "0 000 000 000"
ld de,PRM2 ; ªã¤ 
call ncopy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬), ¬ ªá.15 ᨬ¢.
ld de,9 ; ¨­¤¥ªá " %1 file(s) %2 bytes"
jp MESSAGE ; ¢ë¢¥á⨠áâபã
; <20>®¤£®â®¢¨âì áâபã ᯨ᪠ ä ©«®¢/¯ ¯®ª
A88E2: ld bc,8
ld de,PRM1 ; ¡ãä¥à
ldir
xor a
ld (de),a
ld de,PRM2 ; ªã¤ 
ldi
ldi
ldi
ld (de),a
;ld ix,T9186
ld ix,work_buffer1
call A89A4 ; ¢ë¢¥á⨠¢ ¡ãä¥à ¨¬ï ä ©«  ¨ ¥£® à §¬¥à (ã ¯ ¯ª¨ <DIR>)
call A89FA ; ¢ë¢¥á⨠¢ ¡ãä¥à ¤ âã ä ©« /¯ ¯ª¨
call A8A19 ; ¢ë¢¥á⨠¢ ¡ãä¥à ¢à¥¬ï ä ©« /¯ ¯ª¨
ld de,10 ; ¨­¤¥ªá "%1 %2 %3 %4 %5"
jp MESSAGE ; ¢ë¢®¤ áâப¨
; ‚뢥á⨠¢ ¡ãä¥à ¨¬ï ä ©«  ¨ ¥£® à §¬¥à (ã ¯ ¯ª¨ <DIR>)
A89A4: ld a,(ix+32)
ld hl,T8B38 ; "<DIR> "
and 10h ; ¯ ¯ª  ?
jr nz,A89F4 ; ¤ 
ld l,(ix+28) ; ¬«. à §àï¤
ld h,(ix+29)
exx
ld l,(ix+30) ; áâ. à §àï¤
ld h,(ix+31)
exx
push ix
call A8A8F ; ¤¥áïâ¨ç­ë© 32-å à §àï¤­ë© ¢ë¢®¤
ld hl,T8B37
ld a,(hl)
cp " "
jr nz,A89CD
ld a,"0"
ld (hl),a
A89CD: ld de,T8B46 ; "0 000 000 000"
ld hl,T8B2E ; "0000000000"
ldi
ld a," "
ld (de),a
inc de
ldi
ldi
ldi
ld (de),a
inc de
ldi
ldi
ldi
ld (de),a
inc de
ldi
ldi
ldi
ld hl,T8B46 ; "0 000 000 000"
pop ix
A89F4: ld de,PRM3 ; 16 ¡ãä¥à
jp ncopy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬), ¬ ªá.15 ᨬ¢.
; ‘ª®¯¨à®¢ âì ¢ ¡ãä¥à ¤ âã ä ©« /¯ ¯ª¨
A89FA: ld b,(ix+25)
ld c,(ix+24)
ld hl,T8B46 ; "0 000 000 000"
call A8A53 ; ¢ë¢®¤ ¢ ¡ãä¥à ¤ âë
ld (hl),0
ld hl,T8B46 ; "0 000 000 000"
ld de,PRM4 ; 16 ªã¤ 
ld a,(hl)
cp "0"
jr nz,$+4
ld (hl)," "
jp ncopy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬), ¬ ªá.15 ᨬ¢.
; ‘ª®¯¨à®¢ âì ¢ ¡ãä¥à ¢à¥¬ï ä ©« /¯ ¯ª¨
A8A19: ld b,(ix+22)
ld c,(ix+23)
ld hl,T8B46 ; "0 000 000 000"
call A8A38 ; ᪮¯¨à. ¢ ¡ãä¥à ¢à¥¬ï ä ©« /¯ ¯ª¨
ld (hl),0
ld hl,T8B46 ; "0 000 000 000"
ld de,PRM5 ; 80 ¡ãä¥à áâப¨
ld a,(hl)
cp "0"
jr nz,$+4
ld (hl)," "
jp ncopy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬), ¬ ªá.15 ᨬ¢.
; ¢ ¡ãä¥à ¢à¥¬ï ä ©« /¯ ¯ª¨
A8A38: srl c
rr b
srl c
rr b
srl c
rr b
srl b
srl b
ld a,c
call A8A7E
ld (hl),":" ; à §¤¥«. ¢à¥¬¥­¨
inc hl
ld a,b
jr A8A7E
; ¢ ¡ãä¥à ¤ âã ä ©« /¯ ¯ª¨
A8A53: ld a,c
and 1Fh
push bc
call A8A7E
ld (hl),"." ; à §¤¥«. ¤ âë
inc hl
pop bc
ld a,c
srl b
rla
rla
rla
rla
and 0Fh
call A8A7E
ld (hl),"." ; à §¤¥«. ¤ âë
inc hl
ld a,b
add a,80
cp 100
jr c,A8A7E
A8A75: sub 100
cp 100
jr nc,A8A75
A8A7E: ld c,2Fh
inc c
sub 10
jr nc,$-3
add a,10
add a,"0"
ld (hl),c
inc hl
ld (hl),a
inc hl
ret
; „¥áïâ¨ç­ë© 32-å à §àï¤­ë© ¢ë¢®¤
A8A8F: ld ix,T8B2E ; "0000000000"
exx
ld de,3B9Ah
exx
ld de,0CA00h
call A8B15 ; 1,000,000,000
exx
ld de,05F5h
exx
ld de,0E100h
call A8B15 ; 100,000,000...999,999,999
exx
ld de,98h
exx
ld de,9680h
call A8B15 ; 10,000,000...99,999,999
exx
ld de,0Fh
exx
ld de,4240h
call A8B15 ; 1,000,000...9,999,999
exx
ld de,1
exx
ld de,86A0h
call A8B15 ; 100,000...999,999
exx
ld de,0
exx
ld de,10000
call A8B15 ; 10,000...99,999
exx
ld de,0
exx
ld de,1000
call A8B15 ; 1,000...9,999
exx
ld de,0
exx
ld de,100
call A8B15 ; 100..999
exx
ld de,0
exx
ld de,10
call A8B15 ; 10..99
ld a,l
add a,"0"
ld (ix+0),a
inc ix
ld hl,T8B2E ; "0000000000"
ld de,2030h ; " ","0"
A8B04: ld a,(hl)
cp e
jr nz,A8B0D
ld (hl),d
inc hl
jr A8B04
;
A8B0D: ld hl,T8B37 ; "0"
ld a,(hl)
cp d
ret nz
ld (hl),e
ret
A8B15: xor a
A8B16: inc a
sbc hl,de
exx
sbc hl,de
exx
jp nc,A8B16
add hl,de
exx
adc hl,de
exx
dec a
add a,"0"
ld (ix+0),a
inc ix
ret
D88DC: dw 0
D88DE: dw 0
D88E0: dw 0
T8B2E: db "000000000"
T8B37: db "0"
T8B38: db "<DIR> ",0
T8B46: db "0 000 000 000",0
db 0
;!FIXIT ¯¥à¥­¥á⨠¢ DSS - FN #04: GET_BPB
; ¯à®ç¨â âì BPB ¤¨áª 
read_disk_info:
disk: ld a,0 ; á®åà. ­®¬¥à ¤¨áª 
ld c,1 ; open device
rst 18h
jr c,get_inf_data_err ;!FIXIT ­¥â ®¡à ¡®â稪  ®è¨¡ª
ld a,(disk+1)
ld de,work_buffer ; ¡ãä¥à
ld c,4 ; get BPB
rst 18h
push af
ld a,(disk+1) ; ­®¬¥à ¤¨áª 
ld c,2 ; close device
rst 18h
pop af
jr c,get_inf_data_err ;!FIXIT ­¥â ®¡à ¡®â稪  ®è¨¡ª¨
;
get_inf_data_err:
;
; ‘¥à¨©­ë© ­®¬¥à «®£. ¤¨áª 
ld hl,(work_buffer+41) ; áâ.ç áâì
ld de,serial_string ; xxxx-xxxx
call hex16
ld a,"-"
ld (de),a
inc de
ld hl,(work_buffer+39) ; ¬«.ç áâì
call hex16
;
; Œ¥âª  ¤¨áª 
ld a,(disk+1) ; ­®¬¥à ¤¨áª 
cp 2 ; ¬¥­ìè¥ "C:" ?
jr nc,get_inf_data1 ; ¬¥âª  ¢ BPB
; floppy, ¬¥âª  - ª ª § ¯¨áì ä ©« 
ld c,Dss.ChDisk ; ãáâ. ¤¨áª
RST ToDSS
; ãáâ. ª®à¥­ì ¤¨áª 
ld hl,root_path ; "\",0
ld c,Dss.ChDir
RST ToDSS
; ¯®¨áª ¬¥âª¨
ld hl,mask_fname ; "*.*" ¨¬ï ¬¥âª¨
ld de,work_buffer1 ; ªã¤ 
ld a,8 ;  âਡãâ ¬¥âª¨ ⮬ 
ld bc,0*256 + Dss.F_First ; f_first, ä®à¬ â 11
RST ToDSS
push af
call restore_path ; ¢®ááâ. ⥪. ¯ãâì
pop af
jr c,no_volume_label ; ¬¥âª¨ ­¥â
ld hl,work_buffer1+33 ; ­ ç «® ¬¥âª¨ ¢ ¡ãä¥à¥ f_first
jr volume_label
;
get_inf_data1: ;!FIXIT â ª â ¬ ¯à®¡¥«ë áâ®ïâì ¬®£ãâ, ¥á«¨ ¬¥âª  ª®à®ç¥ 11 ᨬ¢®«®¢
ld hl,work_buffer+53 ; ª®­¥æ ¬¥âª¨ ¢ BPB
ld a,(hl)
cp " " ; ¥áâì ¬¥âª  ?
ld hl,work_buffer+43 ; ­ ç «® ¬¥âª¨ ¢ BPB
jr nz,volume_label ; ¤ 
;!FIXIT ᤥ« âì ç¥à¥§  à£ã¬¥­âë %1-%9
; ­¥â ¬¥âª¨
no_volume_label: ;!FIXIT ᤥ« âì ç¥à¥§ PRM %4
ld hl,volume_string1 ; "has no label "
ld de,MSG0.volume_string ; ªã¤ 
ld bc,14
ldir
ret
;!FIXIT ᤥ« âì ç¥à¥§  à£ã¬¥­âë %1-%9
; ¥áâì ¬¥âª 
volume_label:
ex de,hl
ld hl,MSG0.volume_string ; ªã¤ 
ld (hl),"i"
inc hl
ld (hl),"s"
inc hl
ld (hl)," "
inc hl
ex de,hl
; ᪮¯¨à. ¨¬ï ¬¥âª¨
ld bc,11 ; ¬ ªá. ¤«¨­  ¬¥âª¨
ld a,(hl)
cp " "+1
jr nc,$+6
inc hl
dec c
jr $-7
ld a,11
sub c
ldir
ld b,a
or a ; ¤«¨­  ¬¥âª¨ 11 ᨬ¢. ?
ret z ; ¤ 
; ¤®¯®«­¨âì 墮áâ. ¯à®¡¥« ¬¨
ld (de),a
inc de
djnz $-2
ret
; ‚뢮¤ HL ¢ hex-ä®à¬ â¥
; de=¡ãä¥à
; hl=ç¨á«®
hex16: ld a,h
call hex8
ld a,l
; ¢ë¢®¤ "a"
hex8: push af
rrca
rrca
rrca
rrca
call $+4
pop af
and 0Fh
add a,90h
daa
adc a,40h
daa
ld (de),a
inc de
ret
; ¬ áª  ä ©«®¢
mask_fname:
db "*.*",0
; ª®à¥­ì ¤¨áª 
root_path:
db '\',0
; ‘¥à¨©­ë© ­®¬¥à ¤¨áª 
serial_string:
db "xxxx-xxxx",0
volume_string1: ;!FIXIT ᤥ« âì ç¥à¥§ PRM
db "has no label " ; 14

58
SHELL/Commands/ECHO.ASM Normal file
View File

@ -0,0 +1,58 @@
;///////////////////////////////////////////////////
;
; ECHO. ‚뢮¤ á®®¡é¥­¨© ­  íªà ­
;
;///////////////////////////////////////////////////
cmd_echo:
ex de,hl
ld a,(hl) ; ª®¬-áâப 
or a
jr z,A862E ; ¡¥§  à£ã¬¥­â®¢
ex de,hl
; â¥áâ  à£ã¬¥­â®¢ ­  "on","off"
push de
ld b,3 ; ¤«¨­  áà ¢­¥­¨ï
ld hl,T8C21 ; "ON",0
call A874E ; áà ¢­¨âì áâப¨
pop de
ld a,true ; ०¨¬ "on"
jr z,A864B
push de
ld b,4 ; ¤«¨­  áà ¢­¥­¨ï
ld hl,T8C24 ; "OFF",0
call A874E ; áà ¢­¨âì áâப¨
pop hl
ld a,false ; ०¨¬ "off"
jr z,A864B
;  à£ã¬¥­âë ­¥ "on","off"
A8623: ld c,Dss.PChars
RST ToDSS
jp newline
; <20>®ª § âì ⥪. ०¨¬ íå 
A862E: ld a,(echo_mode) ; ä« £ echo-०¨¬ 
or a
ld de,7 ; ¨­¤¥ªá "on"
jr nz,$+5 ; false
ld de,8 ; ¨­¤¥ªá "off"
call A8BC6 ; ­ ©â¨ áâப㠯® ¨­¤¥ªáã
ld de,PRM1 ; ªã¤  ( à£ã¬¥­â %1)
call ncopy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬), ¬ ªá.15 ᨬ¢.
ld de,6 ; ¨­¤¥ªá "Echo is %1"
jp MESSAGE
;
A864B: ld (echo_mode),a ; ä« £ echo-०¨¬ 
ret
;///////////////////////////////////////////////////
;
; Š®¬ ­¤  "ECHO." ‚áâ ¢ª  ¯ãá⮩ áâப¨ ­  íªà ­
;
;///////////////////////////////////////////////////
cmd_echoLN:
ex de,hl
ld a,(hl) ; ª®¬-áâப 
or a
jp z,newline ; ¡¥§  à£ã¬¥­â®¢
jr A8623 ; ¢ë¢¥á⨠ à£ã¬¥­âë

12
SHELL/Commands/EXIT.ASM Normal file
View File

@ -0,0 +1,12 @@
;///////////////////////////////////////////////////
;
; EXIT. ‚ë室 ¢ த¨â¥«ì᪨© ¯à®æ¥áá
;
;///////////////////////////////////////////////////
cmd_exit:
.TASKX+1: ld a,2 ; ã஢¥­ì ⥪ã饣® 襫« 
dec a
dec a
ret z ; a=2 (primary 襫«)
pop hl ; ¢®ááâ. ¡ « ­á á⥪  (ã¡à âì ¢ë§®¢ A82E7 ¢ £«. 横«¥ ®¡®«®çª¨)
jp back_to_parent_process ; ¢¥à­ãâìáï ¢ த¨â. ¯à®æ¥áá

8
SHELL/Commands/HELP.ASM Normal file
View File

@ -0,0 +1,8 @@
;///////////////////////////////////////////////////
;
; HELP. ‚뢮¤ íªà ­  ¯®¬®é¨
;
;///////////////////////////////////////////////////
cmd_help:
ld de,11 ; ¨­¤¥ªá "COMMANDS: ..."
jp MESSAGE

17
SHELL/Commands/MKDIR.ASM Normal file
View File

@ -0,0 +1,17 @@
;///////////////////////////////////////////////////
;
; MD, MKDIR. ‘®§¤ âì ¯ ¯ªã
;
;///////////////////////////////////////////////////
cmd_mkdir:
ex de,hl
;ld de,T9186 ; ¡ãä¥à
ld de,work_buffer1;
ld c,Dss.GSwitch ; ¢ë¤¥«¨âì ¯ à ¬¥âà ª®¬-áâப¨
RST ToDSS
;ld hl,T9186 ; ¨¬ï ¯ ¯ª¨
ld hl,work_buffer1;
ld c,Dss.MkDir ; á®§¤ âì ¯ ¯ªã
RST ToDSS
call c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï
ret

49
SHELL/Commands/PATH.ASM Normal file
View File

@ -0,0 +1,49 @@
T858C: db "PATH=",0 ; áâப 
;///////////////////////////////////////////////////
;
; PATH. “áâ ­®¢ª  ¯ãâ¨
;
;///////////////////////////////////////////////////
cmd_path:
ld a,(de) ; ª®¬-áâப 
or a
jr z,A85B9 ;  à£ã¬¥­â®¢ ­¥ ¡ë«®
; ãáâ. ¯ãâì
inc de
cp 9 ; Tab
jr z,cmd_path
cp " "+1
jr c,cmd_path
dec de
ex de,hl
dec hl
ld (hl),"="
dec hl
ld (hl),"H"
dec hl
ld (hl),"T"
dec hl
ld (hl),"A"
dec hl
ld (hl),"P" ; ­ ç «® áâப¨ ¨¬¥­¨
ld bc,Dss.Environ.Set*256 + Dss.Environ ; ãáâ ­./㤠«¨âì ¯¥à¥¬. ®ªà㦥­¨ï
RST ToDSS
call c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï
ret
; <20>®ª § âì á¨á⥬­ë© ¯ãâì
A85B9: ;ld de,T9186 ; ªã¤ 
ld de,work_buffer1;
ld hl,T858C ; ¨¬ï ¯¥à¥¬¥­­®© "PATH="
ld bc,Dss.Environ.Get*256 + Dss.Environ ; ¯®«ãç¨âì ¯¥à¥¬¥­­ãî ®ªà㦥­¨ï
RST ToDSS
jp c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï
ld hl,T858C ; "PATH=",0
ld c,Dss.PChars
RST ToDSS
;ld hl,T9186 ; áâப 
ld hl,work_buffer1;
ld c,Dss.PChars
RST ToDSS
jp newline

11
SHELL/Commands/PAUSE.ASM Normal file
View File

@ -0,0 +1,11 @@
;///////////////////////////////////////////////////
;
; PAUSE. <20> ã§  (¢ bat-ä ©«¥)
;
;///////////////////////////////////////////////////
cmd_pause:
ld de,4 ; ¨­¤¥ªá "Press any key to continue ..."
call MESSAGE ; ¢ë¢®¤ áâப¨
ld c,Dss.WaitKey ; ¦¤¥¬ ­ ¦ â¨ï ª« ¢¨è¨
RST ToDSS
ret

6
SHELL/Commands/REM.ASM Normal file
View File

@ -0,0 +1,6 @@
;///////////////////////////////////////////////////
;
; REM. Š®¬¬¥­â à¨© (¢ bat-ä ©«¥)
;
;///////////////////////////////////////////////////
cmd_rem:ret

23
SHELL/Commands/REN.ASM Normal file
View File

@ -0,0 +1,23 @@
;///////////////////////////////////////////////////
;
; REN, RENAME. <20>¥à¥¨¬¥­®¢ âì ä ©«
;
;///////////////////////////////////////////////////
cmd_rename:
ex de,hl
;ld de,T9186
ld de,work_buffer1;
ld c,Dss.GSwitch
RST ToDSS
;ld de,T9206
ld de,work_buffer+256;
ld c,Dss.GSwitch
RST ToDSS
;ld hl,T9186
;ld de,T9206
ld hl,work_buffer1;
ld de,work_buffer+256;
ld c,Dss.Rename
RST ToDSS
call c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï
ret

17
SHELL/Commands/RMDIR.ASM Normal file
View File

@ -0,0 +1,17 @@
;///////////////////////////////////////////////////
;
; RD, RMDIR. “¤ «¨âì ¯ ¯ªã
;
;///////////////////////////////////////////////////
cmd_rmdir:
ex de,hl
;ld de,T9186 ; ¡ãä¥à
ld de,work_buffer1;
ld c,Dss.GSwitch ; ¢ë¤¥«¨âì ¯ à ¬¥âà ª®¬-áâப¨
RST ToDSS
;ld hl,T9186 ; ¨¬ï ¯ ¯ª¨
ld hl,work_buffer1;
ld c,Dss.RmDir ; 㤠«¨âì ¯ ¯ªã
RST ToDSS
call c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï
ret

10
SHELL/Commands/Reboot.asm Normal file
View File

@ -0,0 +1,10 @@
;R12
cmd_reboot: DI
LD C,BIOS.FullInit
RST ToBIOS
LD BC,2*256 + BIOS.REINIT
RST ToBIOS
DI
HALT
;R12

35
SHELL/Commands/SET.ASM Normal file
View File

@ -0,0 +1,35 @@
;///////////////////////////////////////////////////
;
; SET. “áâ ­®¢¨âì ¯¥à¥¬¥­­ãî ®ªà㦥­¨ï
;
;///////////////////////////////////////////////////
cmd_set:ld a,(de) ; ª®¬-áâப 
or a
jr z,A85EE ; ¯ãáâ ï
; ãáâ. ¯¥à¥¬¥­­ãî ®ªà㦥­¨ï
inc de
cp 9
jr z,cmd_set
cp " "+1
jr c,cmd_set
dec de
ex de,hl
ld bc,Dss.Environ.Set*256 + Dss.Environ
RST ToDSS
call c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï
ret
; <20>®ª § âì á¨á⥬­®¥ ®ªà㦥­¨¥
A85EE: ;ld hl,T9186 ; ªã¤ 
ld hl,work_buffer1;
ld bc,Dss.Environ.Read*256 + Dss.Environ ; ¯®«ãç¨âì á¨áâ. ®ªà㦥­¨¥
RST ToDSS
;ld hl,T9186
ld hl,work_buffer1;
A85F8: ld c,Dss.PChars
RST ToDSS
call newline
ld a,(hl)
or a ; ª®­¥æ á¨áâ. ®ªà㦥­¨ï ?
jr nz,A85F8 ; ­¥â
ret

84
SHELL/Commands/VER.ASM Normal file
View File

@ -0,0 +1,84 @@
;///////////////////////////////////////////////////
;
; VER, VERSION. ‚뢮¤ ¢¥àᨨ „Ž‘
;
;///////////////////////////////////////////////////
cmd_version:
LD C,Dss.Version
RST ToDSS
LD L,D
LD H,E
LD DE,PRM1
CALL .Set_Ver_to_PRM ; set DSS version
;R13
LD HL,256*CONSOLE_MODF + CONSOLE_VERS
LD BC,CONSOLE_BUILD
LD DE,PRM2
CALL .Set_Ver_to_PRM ; set Shell version
;R13
LD DE,VERSMSG
JP MESSAGE
; ¢å®¤: hl=ç¨á«®, de=¡ãä¥à
.num_ver:
.num_mod:
ld ix,.tmp1__
res 7,(ix+0)
jr .decim
; ¢å®¤: hl=ç¨á«®, de=¡ãä¥à
.num_build:
ld ix,.tmp1__
res 7,(ix+0)
ld bc,100 ; 100
call .num16
.decim: ld bc,10 ; 10
call .num16
ld a,l
add a,"0"
jr .num16_exit
.tmp1__: BYTE 0
.num16: ld a,'0'-1
and a
inc a
sbc hl,bc
jr nc,$-3
add hl,bc
cp "0"
jr z,$+6
set 7,(ix+0)
bit 7,(ix+0)
ret z
.num16_exit:
ld (de),a ; á®åà. ¢ ¡ãä¥à¥
inc de
ret
;
; ‚室:
; L - ­®¬¥à ¢¥àᨨ (0..9)
; H - ­®¬¥à ¬®¤¨ä¨ª æ¨¨ (0..99)
; BC - ­®¬¥à ¡¨«¤  (0..999)
; DE - ­®¬¥à ¯ à ¬¥âà 
.Set_Ver_to_PRM:
PUSH BC
PUSH HL
LD H,0
CALL .num_ver ;decim2 ­®¬¥à ¢¥àᨨ (0..9)
LD A,'.'
LD (DE),A
INC DE
POP HL
LD L,H
LD H,0
CALL .num_mod ;decim2 ­®¬¥à ¬®¤¨ä¨ª æ¨¨ (0..99)
POP HL
LD A,'.'
LD (DE),A
INC DE
CALL .num_build ;decim3 ­®¬¥à ¡¨«¤  (0..999)
XOR A
LD (DE),A
RET
;

1006
SHELL/EDLINE.ASM Normal file

File diff suppressed because it is too large Load Diff

309
SHELL/ERROR.ASM Normal file
View File

@ -0,0 +1,309 @@
;-------------------------------------------------
; ‚뢮¤ á®®¡é¥­¨ï ®è¨¡ª¨ ¯® ¨­¤¥ªáã
; ¢å®¤: a=­®¬¥à ®è¨¡ª¨
;-------------------------------------------------
print_err_message:
ld e,a
ld d,0
inc de
ld hl,ERR0 ; ¬ áᨢ áâப
ld bc,ERR0.Size ; à §¬¥à ¬ áᨢ 
call A8BCD ; ­ ©â¨ áâபã
call PRINTZ ; ä®à¬ â. ¢ë¢®¤ áâப¨
call newline
jp newline
; ‚뢮¤ áâப¨ ®è¨¡ª¨
;A850D:
invalid_param:
ld de,5 ; ¨­¤¥ªá "Invalid parametr"
jr MESSAGE
;-------------------------------------------------
; ‚뢮¤ á®®¡é¥­¨ï ®è¨¡ª¨ ¯® ¨­¤¥ªáã
; ¢å®¤: de=¨­¤¥ªá áâப¨
;-------------------------------------------------
MESSAGE:
call A8BC6 ; ­ ©â¨ áâப㠯® ¨­¤¥ªáã
jp PRINTZ ; ä®à¬ â. ¢ë¢®¤ áâப¨
;jp A82CC ; ã§­ âì ¨ ãáâ. ¯®«®¦. ªãàá®à 
; <20> ©â¨ áâப㠯® ¨­¤¥ªáã
; ¢å®¤: de=¨­¤¥ªá áâப¨
; ¢ë室: hl=áâப 
A8BC6: inc de
ld hl,MSG0 ; ­ ç «® ¬ áᨢ  áâப
ld bc,MSG0.Size ; à §¬¥à ¬ áᨢ 
A8BCD: xor a
cpir
ret po
ret nz
;R11
XOR A
CP (HL)
JR Z,.no_mess
;
dec de
ld a,d
or e
jr nz,A8BCD
ret
.no_mess: INC HL
RET
;[x] ¨á¯à ¢«¥­ ¡ £ á ¢ë室®¬ §  ¯à¥¤¥«ë ¡ãä¥à  PRM. —ãâì ®¯â¨¬¨§¨à®¢ ­ 
;----------------------------------------------------------------------;
; ”®à¬ â¨à®¢ ­­ë© ¢ë¢®¤ áâப¨ á ¯®¤áâ ­®¢ª®©  à£ã¬¥­â®¢ ¢¬¥áâ® %1-%9
; ¢å®¤: hl=¡ãä¥à áâப¨
;----------------------------------------------------------------------;
PRINTZ: ld a,(hl)
inc hl
or a
ret z
cp '%'
jr z,.check_PRM
.char: ld c,Dss.PutChar
RST ToDSS
jp PRINTZ
.bad_PRM:
ld a,'%'
jp .char
.check_PRM:
ld a,(hl)
cp '9'+1
jr nc,.bad_PRM
inc hl
sub '1'
push hl
;!TEST
;ld l,a
;ld h,0
;add hl,hl ;1+1=2
;add hl,hl ;2+2=4
;add hl,hl ;4+4=8
;add hl,hl ;8+8=16 à §¬¥à ®â¤¥«ì­®£® ¯®¤¡ãä¥à 
ADD A
ADD A
ADD A
ADD A
LD L,A
LD H,0
;
ld bc,PRM1 ; ¡ãä¥à
add hl,bc
ld c,Dss.PChars ; ¢ë¢®¤ áâப¨
RST ToDSS
pop hl
jp PRINTZ
;!FIXIT ¯¥à¥­¥á⨠ª ®¡é¨¬ ¡ãä¥à ¬ ª ª ã ¬¥­ï
; ¡ãä¥àë  à£ã¬¥­â®¢ ª®¬ ­¤­®© áâப¨
PRM1: BLOCK 16,0 ;  à£ã¬¥­â %1
PRM2: BLOCK 16,0 ;  à£ã¬¥­â %2
PRM3: BLOCK 16,0 ;  à£ã¬¥­â %3
PRM4: BLOCK 16,0 ;  à£ã¬¥­â %4
PRM5: BLOCK 16,0 ;  à£ã¬¥­â %5
PRM6: BLOCK 16,0 ;  à£ã¬¥­â %6
PRM7: BLOCK 16,0 ;  à£ã¬¥­â %7
PRM8: BLOCK 16,0 ;  à£ã¬¥­â %8
PRM9: BLOCK 16,0 ;  à£ã¬¥­â %9
;!TODO ­¥ § ¡ëâì § ¬¥­¨âì æ¨äàë ­  í⨠¬¥âª¨
DIR1MSG EQU 0
VERSMSG EQU 1
DATEMSG EQU 2
TIMEMSG EQU 3
PAUSMSG EQU 4
ILLGMSG EQU 5
ECHOMSG EQU 6
ON__MSG EQU 7
OFF_MSG EQU 8
DIR2MSG EQU 9
DIR3MSG EQU 10
HELPMSG EQU 11
MSG0: db 0
; 0
db "Volume in drive %1 "
.volume_string: ;!FIXIT ᤥ« âì ç¥à¥§ PRM
db "has no label ",0Dh,0Ah ;0
db "Volume Serial Number is %2",0Dh,0Ah
db 0Dh,0Ah,"Directory of %3",0Dh,0Ah,0Ah,0
; 1
db "Estex DSS version %1. Console version %2.",CR,LF,0 ;R13
; 2
db "Current date: %1",0Dh,0Ah,0 ;2
db "Current time: %1",0Dh,0Ah,0 ;3
db "Press any key to continue . . .",0Dh,0Ah,0Ah,0 ;4
db "Invalid parametr",0Dh,0Ah,0 ;5
db "Echo is %1",0Dh,0Ah,0 ;6
db "on",0 ;7
db "off",0 ;8
db " %1 file(s) %2 bytes",0Dh,0Ah,0Ah,0 ;9
; 10 FILENAME EXT SIZE DATE TIME
db "%1 %2 %3 %4 %5",0Dh,0Ah,0 ;10
; 11
DB "COMMANDS:",CR,LF,CR,LF
DB "DIR REN | RENAME PATH HELP ",CR,LF
DB "CD | CHDIR DEL | ERASE SET VER | VERSION ",CR,LF
DB "MD | MKDIR TIME ECHO EXIT ",CR,LF
DB "RD | RMDIR DATE CLS REBOOT ",CR,LF,0
;R11
BYTE 0
DZ "Unknown command"
;
.Size EQU $-MSG0
/*
MSG0: DB 0
DB "Volume in drive %1 has no label",CR,LF ; !FIXIT
DB "Volume Serial number is %2",CR,LF
DB "Directory of %3",CR,LF,CR,LF,0
DB "Estex DSS: Version %1",CR,LF,0 ;R02
DB "Current date: %1",CR,LF,0
DB "Current time: %1",CR,LF,0
DB "Press any key to continue . . .",CR,LF,0
DB "Invalid parametr",CR,LF,0
DB "Echo is %1",CR,LF,0
DB "on",0
DB "off",0
DB " %1 file(s) %2 bytes",CR,LF,CR,LF,0
; FILENAME EXT SIZE DATE TIME
DB "%1 %2 %3 %4 %5",CR,LF,0
DB "COMMANDS:",CR,LF,CR,LF
DB "DIR REN | RENAME PATH HELP ",CR,LF
DB "CD | CHDIR DEL | ERASE SET VER | VERSION ",CR,LF
DB "MD | MKDIR TIME ECHO EXIT ",CR,LF
DB "RD | RMDIR DATE CLS REBOOT ",CR,LF,0
;R11
BYTE 0
DZ "Unknown command"
;
.Size EQU $-MSG0
*/
;-----------------------------------------------------------------------
;!FIXIT äã­ªæ¨ï ¢ë§ë¢ îé ï ¢ë¢®¤ ®è¨¡ª¨ ¤¥« ¥â ¢ ­ ç «¥ 䨫ìâà ¯® ­®¬¥à ¬ ¨ ­¥áª®«ìª® ¯¥à¢ëå ®â訢 îâáï
ERR0: DB #00
DZ "Bad command or file name"
DZ "Invalid function" ; 01 - ­¥¢¥à­ë© ­®¬¥à ä㭪樨
DZ "Invalid drive number" ; 02 - ­¥¯à ¢¨«ì­ë© ­®¬¥à ãáâனá⢠
DZ "File not found" ; 03 - ä ©« ­¥ ®¡­ à㦥­
DZ "Path not found" ; 04 - ­¥¢¥à­ë© ¯ãâì
DZ "Invalid handle" ; 05 - ­¥áãé¥áâ¢ãî騩 ä ©«®¢ë© ¬ ­¨¯ã«ïâ®à
DZ "Too many open files" ; 06 - ­¥â ᢮¡®¤­®£® ä ©«®¢®£® ¬ ­¨¯ã«ïâ®à 
DZ "File already exist" ; 07 - ä ©« áãé¥áâ¢ã¥â
DZ "File read only" ; 08 - ä ©« ⮫쪮 ¤«ï ç⥭¨ï
DZ "Root overflow" ; 09 - ¯¥à¥¯®«­¥­¨¥ ROOT (ª®à­¥¢®£® ª â «®£ )
DZ "No free space" ; 10 - ­¥â ᢮¡®¤­®£® ¬¥áâ  ­  ¤¨áª¥
DZ "Directory not empty" ; 11 - ª â «®£ ­¥ ¯ãáâ
DZ "Can't delete current directory" ; 12 - ­¥ã¤ ç­ ï ¯®¯ë⪠ 㤠«¨âì ⥪ã騩 ª â «®£
DZ "Invalid media" ; 13 - ­¥¨§¢¥áâ­ë© ä®à¬ â
DZ "Unknown operation" ;R02 ; 14 - ­¥¢®§¬®¦­ ï ®¯¥à æ¨ï
DZ "Directory exist" ; 15 - ª â «®£ 㦥 ¥áâì
DZ "Invalid filename" ; 16 - ­¥¢¥à­®¥ ¨¬ï
DZ "Invalid EXE-file" ; 17 - ­¥¯à ¢¨«ì­ë© EXE-ä ©«
DZ "Not supported EXE-file" ; 18 - ­¥ ¯®¤¤¥à¦¨¢ ¥¬ ï ¢¥àá¨ï EXE-ä ©« 
DZ "Access denied" ; 19 - à¥áãàá ­¥ ¤®áâ㯥­
DZ "Not ready" ; 20 - ­¥â £®â®¢­®áâ¨
DZ "Seek error" ; 21 - ®è¨¡ª  ¯®§¨æ¨®­¨à®¢ ­¨ï
DZ "Sector not found" ; 22 - ᥪâ®à ­¥ ­ ©¤¥­
DZ "CRC error" ; 23 - ®è¨¡ª  CRC
DZ "Write protect" ; 24 - § é¨â  § ¯¨á¨
DZ "Read error" ; 25 - ®è¨¡ª  ç⥭¨ï
DZ "Write error" ; 26 - ®è¨¡ª  § ¯¨á¨
DZ "Drive failure" ; 27 - á¡®© ¤¨áª 
DZ "Extended error 28"
DZ "Extended error 29"
DZ "Not enough memory" ; 30 - ­¥¤®áâ â®ç­® ¯ ¬ïâ¨
DZ "Invalid memory block" ; 31 - ­¥áãé¥áâ¢ãî騩 ¡«®ª ¯ ¬ïâ¨
DZ "Extended error 32"
DZ "Maximum PATH size exceeded" ; 33 - ¯à¥¢ë襭 ¬ ªá¨¬ «ì­ë© à §¬¥à ¯¥à¥¬¥­­®©
DZ "Extended error 34"
DZ "Too many files in directory" ; 35 - ᫨誮¬ ¬­®£® ä ©«®¢ ¢ ¤¨à¥ªâ®à¨¨
DZ "Directory nesting too large or number of folders > 1023" ; 36 - ᫨誮¬ ¡®«ìè ï ¢«®¦¥­­®áâì ª â «®£®¢ ¨«¨ ª®«¨ç¥á⢮ ¯ ¯®ª > 1023
DZ "Operation aborted by user" ; 37 - ®¯¥à æ¨ï ¯à¥à¢ ­  ¯®«ì§®¢ â¥«¥¬
DZ "Common error" ; 38 - ®¡é ï ®è¨¡ª 
DZ "Unexpected application termination" ; 39 - unexpected application termination / ­¥®¦¨¤ ­­®¥ § ¢¥à襭¨¥ ¯à¨«®¦¥­¨ï
DZ "40"
DZ "41"
DZ "42"
DZ "43"
DZ "44"
DZ "45"
DZ "46"
DZ "Wrong video mode" ; 48 - ­¥¯à ¢¨«ì­ë© ¢¨¤¥®à¥¦¨¬
DZ "48"
DZ "49"
DZ "50"
;R11
DB 0 ; ®£à ­¨ç¨â¥«ì, ç⮡ ¯à¨ ®è¨¡ª¥ ¡®«ìè¥, 祬 ¥áâì á®®¡é¥­¨© ¢ë¤ ¢ «®áì ®¡é¥¥:
DZ "Unknown error"
;
.Size EQU $-ERR0
;-----------------------------------------------------------------------
/*
; ‘®®¡é¥­¨ï ®è¨¡®ª „Ž‘
ERR0: db 0
db "Bad command or file name",0 ;0
db "Invalid function",0 ;1
db "Invalid drive number",0 ;2
db "File not found",0 ;3
db "Path not found",0 ;4
db "Invalid handle",0 ;5
db "Too many open files",0 ;6
db "File already exist",0 ;7
db "File read only",0 ;8
db "Root overflow",0 ;9
db "No free space",0 ;10
db "Directory not empty",0 ;11
db "Can't delete current directory",0 ;12
db "Invalid media",0 ;13
db "Unknown operation",0 ;14
db "Directory exist",0 ;15
db "Invalid filename",0 ;16
db "Invalid EXE-file",0 ;17
db "Not supported EXE-file",0 ;18
db "Access denied",0 ;19
db "Not ready",0 ;20
db "Seek error",0 ;21
db "Sector not found",0 ;22
db "CRC error",0 ;23
db "Write protect",0 ;24
db "Read error",0 ;25
db "Write error",0 ;26
db "Drive failure",0 ;27
db "Extended error 28",0 ;28
db "Extended error 29",0 ;29
db "Not enough memory",0 ;30
db "Invalid memory block",0 ;31
db "Extended error 32",0 ;32
db "Extended error 33",0 ;33
db "Extended error 34",0 ;34
db "Too many files in directory",0 ;35 ᯨ᮪ ä ©«®¢
db "36",0 ;36 (᫨誮¬ ¡®«ìè ï ¢«®¦. ¯ ¯®ª ¨«¨ >= 1024 ¯ ¯®ª)
db "User abort",0 ;37 User abort (®¯¥à æ¨ï ¯à¥à¢ ­  ¯®«ì§®¢ â¥«¥¬)
db "38",0 ;38
db "39",0 ;39
db "40",0 ;40
db "41",0 ;41
db "42",0 ;42
db "43",0 ;43
db "44",0 ;44
db "45",0 ;45
db "46",0 ;46
db "47",0 ;47
db "48",0 ;48
db "49",0 ;49
db "50",0 ;50
.Size EQU $-ERR0
*/

34
SHELL/README.txt Normal file
View File

@ -0,0 +1,34 @@
‘®àæë à ¡®ç¨¥!. <20>à ªâ¨ç¥áª¨ ­¨ç¥£® ­¥ 㡨ࠫ ¨§ ­¨å, ­  á«ãç © ¢ë«¥§ ­¨ï
£«îª®¢.
Š®¬ ­¤  DIR ¢ë¢®¤¨â ⥯¥àì ¬¥âªã ¨ á¥à¨©­¨ª ¤¨áª®¢.
bat-ª®¬ ­¤ë:
PAUSE
REM
¤®á-ª®¬ ­¤ë:
CD,CHDIR
CLS
DATE,TIME
DEL,ERASE
DIR
ECHO,ECHO.
EXIT
HELP
MD,MKDIR
PATH
REN,RENAME
RD,RMDIR
SET
VER,VERSION
<EFBFBD>¥à¥¬¥é¥­¨¥ ¯® ¨áâ®à¨¨ ª®¬ ­¤:
Esc - á¡à®á¨âì ⥪ãéãî áâபã
Ins - ᬥ­  ०¨¬  ¢¢®¤  (¢áâ ¢ª /§ ¬¥­ )
ªãàá. ª« ¢¨è¨ ¢¢¥àå/¢­¨§ - ¯à®ªàã⪠ ¨áâ®à¨¨
PageUp - ¢ ­ ç «® ¨áâ®à¨¨
PageDown - ¢ ª®­¥æ ¨áâ®à¨¨
Ctrl+Del - áâ¥à¥âì ¨áâ®à¨î

510
SHELL/SHELL.ASM Normal file
View File

@ -0,0 +1,510 @@
; <20>®á«¥¤­ïï । ªæ¨ï: 22.10.2006
;
; - ˆá¯à ¢«¥­ ä¨à¬. ¡ £, ¯à¨ ª®â®à®¬ áâப  ¢ bat-ä ©«¥, ¤«¨­­¥¥ è¨à¨­ë
; íªà ­ , ®¡à¥§ « áì ¯® è¨à¨­¥ íªà ­  ¨ ®áâ â®ª áâப¨ ­¥ ¢ë¢®¤¨«áï.
; - ˆá¯à ¢«¥­ ä¨à¬. ¡ £, ¯à¨ ª®â®à®¬ ¢ ª®¬ ­¤¥ "dir" áâப  ¢ë¢®¤¨¬®£®
; ¯ã⨠¨¬¥«  ¬ ªá. 15 ᨬ¢®«®¢.
; - <20>®ä¨ªá¥­® ­¥¢¥à­®¥ ¨§¬¥­¥­¨¥ ¤¨áª /¯ã⨠¯®á«¥ ®è¨¡®ª ¢ë¯®«­¥­¨ï ª®¬ ­¤.
; - „®¡ ¢«¥­  ª®¬ ­¤  "ECHO." ¤«ï ¢áâ ¢ª¨ ¯ãá⮩ áâப¨.
; - Š®¬ ­¤  DIR ¢ë¢®¤¨â ¬¥âªã ¨ á¥à¨©­ë© ­®¬¥à ¤¨áª®¢.
;
;
includelua 'Shared_includes/lua/Functions.lua'
include 'shared_includes/constants/bios_equ.inc'
include 'shared_includes/constants/dss_equ.inc'
include 'SHELL/version.inc'
;
; Program EQU section
;---------------------------------------------------------------------[]
CR EQU 13
LF EQU 10
;---------------------------------------------------------------------[]
;
true equ 1
false equ 0
work_buffer1 equ entry - (256+128) ; 2-© à ¡. ¡ãä¥à ;!FIXIT ¯¥à¥­¥á⨠¢ ª®­¥æ
work_buffer2 equ entry - 256 ; 3-© à ¡. ¡ãä¥à ;!FIXIT ¯¥à¥­¥á⨠¢ ª®­¥æ
org 7F00h
db "EX" ; exe ID
db 45h ; exe ⨯
db 0 ; exe ¢¥àá¨ï
dw 512 ; 512, ¬«. ᬥé. ª®¤ 
dw 0 ; áâ. ᬥé. ª®¤ 
dw 0 ; end-beg, ¯¥à¢¨ç­ë© § £àã§ç¨ª
dw 0,0,0 ; १¥à¢
dw entry ;  ¤à¥á § £à㧪¨ ª®¤ 
dw shell ;  ¤à¥á ¯¥à¥¤ ç¨ ã¯à ¢«¥­¨ï
dw 0C000h ;  ¤à¥á á⥪ 
ds 490 ; १¥à¢
; ‚¥àá¨ï/Œ®¤¨ä¨ª æ¨ï/<2F>¨«¤ 襫« 
entry: db "0.01.003" ;!FIXIT ¯¥à¥­¥á⨠¢ ª®­¥æ
;==============================================================
; ’®çª  ¢å®¤  ¢ ˜¥««
;==============================================================
shell:
;!TODO merge:  ªâ¨¢¨à®¢ âì ª®£¤  ¡ãä¥àë ¡ã¤ãâ ç¥à¥§ áâàãªâãàã,   ­¥ ­ã«ï¬¨
;LD HL,WORK_BUFFERS
;LD DE,WORK_BUFFERS+1
;LD BC,BUFFERS_STRUCT-1
;LD (HL),0
;LDIR
;
; á®åà. ã஢¥­ì ⥪. 襫« 
ld a,(ix-1)
ld (cmd_exit.TASKX),a
push ix
call save_disk_path ; á®åà. ⥪. ¤¨áª ¨ ¯ãâì
pop hl ; hl=ix
;
; ’¥áâ ­  ®¯æ¨¨ § ¯ã᪠ á ¬®£® 襫« 
call GET_CMD
ld a,(RUNMODE) ; ¡¨â-ä« £¨ ®¯æ¨©
bit 7,a ; "P" 7-© ¡¨â (¨¤¥â ¢ë§®¢ ¨§ boot-§ £àã§ç¨ª )
jr nz,FPRIMAR
bit 5,a ; "S" 5-© ¡¨â (§ ¯ã᪠2-© ª®¯¨¨ 襫« )
;jp nz,option_s
jr nz,run_shell
bit 4,a ; "C" 4-© ¡¨â (¢ë¯®«­¨âì bat-ä ©«)
jr nz,option_c
bit 6,a ; 6-© ¡¨â (¢¢®¤¨«¨áì ¤®¯®«­. ¯ à ¬¥âàë)
jr z,back_to_parent_process
; ¢¢®¤¨«¨áì ¤®¯®«­. ¯ à ¬¥âàë
call CMDMODE ; (batch.asm) ¢ë¯®«­. ª®¬ ­¤ã ¨«¨ § ¯ãáâ¨âì ä ©«
call save_disk_path ; ã§­ âì ¨ á®åà. ⥪. ¤¨áª ¨ ¯ãâì
;
; ‚¥à­ãâìáï ¢ த¨â. ¯à®æ¥áá
back_to_parent_process:
ld bc,0*256 + Dss.Exit
RST ToDSS
ret
;---------------------------------------------------------------
; ޝæ¨ï "S". ‡ ¯ã᪠2-© ª®¯¨¨ 襫« . <20>¥§ ®âà ¡®âª¨ AUTOEXEC.BAT.
; Œ®¦­® ¢ë©â¨ ¯® EXIT.
;---------------------------------------------------------------
; option_s:
; call cmd_version ; ¢¥àá¨ï „Ž‘
; jr run_shell
;---------------------------------------------------------------
; ޝæ¨ï "C". ‚믮«­¨âì BAT-ä ©«.
; <20>®á«¥ ¢ë¯®«­¥­¨ï ä ©« , ¢®§¢à é ¥âáï ¢ த¨â¥«ì᪨© ¯à®æ¥áá.
;---------------------------------------------------------------
option_c:
;ld hl,T96AE ; ¨¬ï bat-ä ©« , 256 ¡ãä¥à (inline.asm)
;ld hl,work_buffer+256;;
ld hl,struct_input_line+5 ; ¨¬ï bat-ä ©« 
call BATCH ; ®¡à ¡®âª  bat-ä ©«  (batch.asm)
call save_disk_path ; ã§­ âì ¨ á®åà. ⥪. ¤¨áª ¨ ¯ãâì
jr back_to_parent_process ; ¢¥à­ãâìáï ¢ த¨â. ¯à®æ¥áá
;---------------------------------------------------------------
; ޝæ¨ï "P". ‡ ¯ã᪠ª®¯¨¨ 襫« . ®âà ¡®âª®© AUTOEXEC.BAT.
; ­¥© ¨¤¥â ¢ë§®¢ 襫«  ¨§ boot-§ £àã§ç¨ª .
; Œ®¦­® ¢ë©â¨ ¯® EXIT, ­® ­¥ ¨§ § ¯ã饭­®£® boot-§ £àã§ç¨ª®¬.
;---------------------------------------------------------------
FPRIMAR:
ld c,Dss.CTRLKey ; ã§­ âì á®áâ. ª« ¢ë ¢ ¤ ­­ë© ¬®¬¥­â
RST ToDSS
ld hl,autoexec_fname ; ¨¬ï ä ©«  "system.bat"
ld a,b
and #C0 ; ­ ¦ âë Shift-ë ?
call z,BATCH ; ­¥â, ¢ë¯®«­¨âì bat-ä ©« (batch.asm)
;==============================================================
; ‡ ¯ã᪠ª®¯¨¨ 襫« 
;==============================================================
run_shell:
call newline
run_shell_loop:
;call A82CC ; ã§­ âì ¨ ãáâ. ¯®«®¦. ªãàá®à 
; ¢ë¢¥á⨠⥪.á¨áâ. ¯ãâì ¨ ¢®©â¨ ¢ áâபã । ªâ¨à®¢ ­¨ï
call save_disk_path ; ã§­ âì ¨ á®åà. ⥪. ¤¨áª ¨ ¯ãâì
run_shell_loop1:
call input_line
call newline ; ­  ­®¢ãî áâபã
ld a,(struct_input_line+4) ; ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
or a
jr z,run_shell_loop1 ; ¯ãáâ ï
; <20> àᨭ£ ¨ ¢ë¯®«­¥­¨¥ ª®¬ ­¤
call A82E7
jr run_shell_loop ; ­ § ¤ ¢ 横«
; ’¥áâ ®¯æ¨© 襫« 
; ¢å®¤: hl= ¤à¥á ª®¬-áâப¨
GET_CMD:
ld e,(hl) ; ¤«¨­  áâப¨
inc hl
ld d,0
ex de,hl ; hl=¤«¨­  áâப¨, de=áâப 
add hl,de
; ã¡à âì ª®­æ¥¢ë¥ ¯à®¡¥«ë
dec hl
ld a,(hl)
cp " "
jr z,$-4
inc hl
ld (hl),0 ; ¢ ª®­¥æ ª®¬-áâப¨
.NEXTPRM:
ex de,hl ; hl=⥪.  ¤à¥á ¢ áâப¥
.SKIPSP:
ld a,(hl)
inc hl
cp " "
ret c
jr z,.SKIPSP
dec hl
cp '/' ; ®¯æ¨ï
jr nz,.PROCESS
ld de,work_buffer1 ; 128 ¡ãä¥à ¤«ï ¯ à ¬¥âà 
ld c,Dss.GSwitch ; ¢ë¤¥«. ¯ à ¬¥âà ª®¬-áâப¨
RST ToDSS
push af
ex de,hl
ld hl,work_buffer1 ; 128 ¡ãä¥à ¤«ï ¯ à ¬¥âà 
inc hl
call set_option_flag ; ãáâ. ¡¨âë ä« £®¢
pop af
jr nc,.NEXTPRM
ret
; ãáâ. ¡¨â-ä« £
.PROCESS:
ld a,(RUNMODE)
set 6,a ; 6-© ¡¨â (¢¢®¤¨«¨áì ¤®¯®«­. ¯ à ¬¥âàë) ;!HARDCODE
ld (RUNMODE),a
; ᪮¯¨à. ¯ à ¬¥âà ¨§ ª®¬-áâப¨
; ¢ ¡ãä¥à áâப¨ । ªâ¨à®¢ ­¨ï
;copy_to_input_line:
ld iy,struct_input_line ; áâàãªâãà  ¡ãä¥à  ~input line~
push hl
call clear_inpline ; ®¡­ã«¨âì áâàãªâãàã "input line"
pop de ; de=墮áâ áâப¨
.loop: ld hl,struct_input_line ; áâàãªâãà  ¡ãä¥à  ~input line~
ld a,(iy+2) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
add a,(iy+3)
add a,l
ld l,a
jr nc,1F
inc h
1: inc hl
inc hl
inc hl
inc hl
inc hl
ld a,(de) ; ᨬ¢®« ¨§ áâப¨
ld (hl),a
or a
ret z ; ª®­¥æ áâப¨
inc (iy+4) ; ç¨á«® ¢¢¥¤. ᨬ¢®«®¢
inc (iy+2) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ áâப¥
ld a,(width_inpline) ; è¨à¨­  ¯®«ï ¢¢®¤ 
cp (iy+2) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
jr nz,2F
; ªãàá®à §  ¯à ¢ë¬ ªà ¥¬ ¯®«ï ¢¢®¤ 
inc (iy+3) ; ᬥé. áâப¨ §  «¥¢ë© ªà ©
dec (iy+2) ; X ⥪. ¯®«®¦. ªãàá®à  ¢ ¯à¥¤¥« å áâப¨
2: ld a,(de) ; ᨬ¢®« ¨§ áâப¨
inc de ; ¯à®¤¢. ¯®â®ª
cp " "
jr nc,.loop
ret
; ’¥áâ ­  ®¯æ¨¨ 襫«  ¨ ãáâ. ¡¨â-ä« £®¢
; ¢å®¤: hl=áâப  ®¯æ¨©
set_option_flag:
ld a,(RUNMODE) ; ï祩ª  ¡¨â-ä« £®¢
ld c,a
ld a,(hl)
cp "a"
jr c,setopt1
cp "z"+1
jr nc,$+4
and 5Fh ; a..z -> A..Z
setopt1: cp "P" ; § ¯ã᪠襫«  á ®âà ¡. autoexec.bat
jr nz,setopt2
set 7,c
jr setopt4
;
setopt2: cp "S" ; § ¯ã᪠2-© ª®¯¨¨ 襫«  (¡¥§ ®âà ¡. autoexec.bat)
jr nz,setopt3
set 5,c
jr setopt4
;
setopt3:cp "C" ; ¢ë¯®«­. bat-ä ©« ¨ ¢¥à­ãâìáï ¢ த¨â. ¯à®æ¥áá
ret nz
set 4,c
setopt4: ld a,c
ld (RUNMODE),a
ret
;!TODO ¯à®¢¥à¨âì 4 ­¨¦¥¨¤ã騥 ¯à®æ¥¤ãàë ª®£¤  ¢ DSS ¡ã¤ãâ ­®à¬ «ì­® ¯ã⨠§ ¯®¬¨­ âìáï
; ‘®åà ­¨âì ⥪. ¤¨áª ¨ ¯ãâì
;GETPATH:
save_disk_path:
; ã§­ âì ⥪. ª â «®£
ld hl,system_path ; 256 ¡ãä¥à á¨áâ. ¯ãâ¨
ld c,Dss.CurDir
RST ToDSS
save_disk:
; ã§­ âì ⥪. ¤¨áª
ld c,Dss.CurDisk
RST ToDSS
add a,"A"
ld (screen_path),a ; 33 áâப  íªà ­­®£® ¯ãâ¨
ret
; ‚®ááâ ­®¢¨âì ⥪. ¤¨áª ¨ ¯ãâì (¯®á«¥ ®è¨¡ª¨)
restore_disk_path:
; ãáâ. ⥪. ¤¨áª
ld a,(screen_path) ; 33 áâப  íªà ­­®£® ¯ãâ¨
sub "A"
ld c,Dss.ChDir
RST ToDSS
restore_path:
; ãáâ. ⥪. ª â «®£
ld hl,system_path ; 256 ¡ãä¥à á¨áâ. ¯ãâ¨
ld c,Dss.ChDir
RST ToDSS
ret
; ­  ­®¢ãî áâபã ;!FIXIT ᤥ« âì ç¥à¥§ .PChars
newline:ld a,_cc.cr
ld c,Dss.PutChar
RST ToDSS
ld a,_cc.lf
ld c,Dss.PutChar
RST ToDSS
ret
; ‘à ¢­¥­¨¥ áâப
; in: de=string1
; hl=string2
; b=¤«¨­  áâப¨
A874E: ld a,(de)
cp "a"
jr c,$+8
cp "z"+1
jr nc,$+4
and 5Fh ; a..z -> A..Z
cp (hl)
ret nz
inc hl
inc de
djnz A874E
ret
; ‘ª®¯¨à. áâபã (á ­ã«¥¬), ¬ ªá. 15 ᨬ¢®«®¢
; (hl) -> (de)
ncopy_string:
ld bc,15 ; ¬ ªá. ¤«¨­  áâப¨
ld a,(hl)
ldi
ret po
or a
jr nz,$-5
ret
; ‘ª®¯¨à. áâபã (á ­ã«¥¬)
; (hl) -> (de)
copy_string:
ld a,(hl)
ldi
or a
jr nz,copy_string
ret
; „¥áïâ¨ç­ë© ¢ë¢®¤ ¢ ¡ãä¥à
; ¢å®¤: a=ç¨á«®
; hl=¡ãä¥à
A8913: ld c,2Fh
inc c
sub 10
jr nc,$-3
add a,10
add a,"0"
push af
ld a,c
ld (hl),a
inc hl
pop af
ld (hl),a
inc hl
ret
A893C: ld hl,0
A893F: ld a,(de)
inc de
or a
ret z
cp "." ; à §¤¥«. ¤ âë
ret z
cp "-" ; à §¤¥«. ¤ âë
ret z
cp ":" ; à §¤¥«. ¢à¥¬¥­¨
ret z
ld b,h
ld c,l
add hl,hl
add hl,hl
add hl,bc
add hl,hl
call A895A
ret c
add a,l
ld l,a
jr nc,A893F
inc h
jr A893F
; char -> int
A895A: cp "0"
ret c
cp "9"+1
ccf
ret c
sub "0"
ret
A8964: ld de,10000
ld a,0C8h ; ret z
ld (D8996),a
call A898E
ld de,1000
call A898E
ld de,100
call A898E
ld de,10
call A898E
ld a,l
add a,"0"
;!TEST
;ld (ix+0),a
;inc ix
;ld (ix+0),0
LD (IX+0),A
LD (IX+1),0
;
ret
A898E: xor a
inc a
sbc hl,de
jr nc,$-3
add hl,de
dec a
D8996: ret z
add a,"0"
ld (ix+0),a
inc ix
xor a ; nop
ld (D8996),a
ret
Restore_Screen:
LD C,Dss.GetVMod
RST ToDSS
AND #80
RET Z
LD BC,1 * 256 + Dss.SetVMod
LD A,Dss.SetVMod.txt80x32
JP ToDSS
; 梥â íªà ­  襫« 
color_screen:
db 07h
; ˆ¬ï ä ©«  "autoexec.bat"
autoexec_fname:
db "system.bat",0
; ¡¨â-ä« £¨ ®¯æ¨© á ¬®£® 襫« 
RUNMODE: db 0
; ¡ãä¥à à áè. ä ©« 
T8C1A: ds 3
db 0
T8C1E: db "BAT" ; à áè. bat-ä ©« 
T8C21: db "ON",0
T8C24: db "OFF",0
include "edline.asm" ; áâப  । ªâ¨à®¢ ­¨ï
include "batch.asm" ; ¯ àᨭ£ bat-ä ©«®¢
include "shell_exec.asm" ; ¢ë¯®«­. ¢¢¥¤. ª®¬ ­¤ á ª®­á®«¨
include "error.asm" ; ä㭪樨 ¢ë¢®¤  á®®¡é¥­¨© ®è¨¡®ª
;
include "Commands/exit.asm" ; ¢ë室 ¢ த¨â. ¯à®æ¥áá
include "Commands/pause.asm" ; ¯ ã§ 
include "Commands/rem.asm" ; ª®¬¬¥­â à¨©
include "Commands/ver.asm" ; ¢ë¢®¤ ¢¥àᨨ „Ž‘
include "Commands/cls.asm" ; ®ç¨á⪠ íªà ­ 
include "Commands/date.asm" ; ¢ë¢®¤ ¨«¨ ãáâ ­®¢ª  ¤ âë/¢à¥¬¥­¨
include "Commands/dir.asm" ; ¢ë¢®¤ ᯨ᪠ ¤¨à¥ªâ®à¨¨
include "Commands/chdir.asm" ; ᬥ­  ⥪. ª â «®£ 
include "Commands/mkdir.asm" ; á®§¤ ­¨¥ ª â «®£ 
include "Commands/rmdir.asm" ; 㤠«¥­¨¥ ª â «®£ 
include "Commands/del.asm" ; 㤠«¥­¨¥ ä ©« 
include "Commands/ren.asm" ; ¯¥à¥¨¬¥­®¢ ­¨¥ ä ©«  ¨«¨ ª â «®£ 
include "Commands/echo.asm" ; íå®-०¨¬
include "Commands/help.asm" ; ¢ë¢®¤ íªà ­  ¯®¬®é¨
include "Commands/path.asm" ; § ¤ âì á¨áâ. ¯ãâì
include "Commands/set.asm" ; § ¤ âì ¯¥à¥¬¥­­ãî ®ªà㦥­¨ï
include "Commands/reboot.asm" ; á®äâ à¥á¥â
;
;

193
SHELL/SHELL_EXEC.ASM Normal file
View File

@ -0,0 +1,193 @@
; à ¡. ï祩ª 
D8374: dw 0
;-------------------------------------------------------------
; <20> §¡®à ¨ ¢ë¯®«­¥­¨¥ ¢¢¥¤¥­­ëå ª®¬ ­¤ ¨ ¨¬¥­ ä ©«®¢
;-------------------------------------------------------------
A82E7: call EVALCMD ; (batch.asm)
ld hl,struct_input_line+5
dec hl
;ld hl,struct_input_line+4;;
ld c,(hl) ; ¤«¨­  áâப¨
ld b,0
inc hl ; struct_input_line+5
;ld hl,work_buffer+256;;
A82F2: ld a,(hl)
cp " "
jr nz,A82FC
inc hl
dec c
jr nz,A82F2
ret
;
A82FC: ld d,h
ld e,l
add hl,bc
ld (hl),0
sbc hl,bc
ld a,c
ex af,af'
ld a," "
cpir
jr nz,A830C
inc c
A830C: ex af,af'
sub c
ld c,a
ld hl,CMDLIST ; ᯨ᮪ ª®¬ ­¤ „Ž‘- 
; de=struct_input_line+5, c=¤«¨­  áâப¨
; ®â bat-®âà ¡®âª¨
A8312: push bc
push de
A8314: ld a,(de)
cp "a"
jr c,A8321
cp "z"+1
jr nc,A8321
and 5Fh ; a..z -> A..Z
A8321: cp (hl)
jr nz,COMP002 ; ­¥ ¤®á-ª®¬ ­¤ë
inc hl
inc de
dec c
jr nz,A8314
xor a
cp (hl)
jr nz,COMP002
pop bc
pop bc
ld a,(de)
cp " "
jr nz,A8338
inc de
A8338: inc hl
ld a,(hl)
inc hl
ld h,(hl)
ld l,a
jp (hl) ; ­  á®®â¢. ®¡à ¡®â稪 ¤®á-ª®¬ ­¤ë
; <20>¥ ¤®á-ª®¬ ­¤ë. ’¥áâ ­  § ¤ ­¨¥ ¤¨áª  ¨ § ¯ã᪠䠩« 
COMP002: xor a
LD C,A
CPIR
inc hl
inc hl
pop de
pop bc
ld a,(hl)
or a
jr nz,A8312 ; ­ § ¤ ¢ 横«, ¥é¥ ­¥ ¤®è«¨ ª®­æ  ᯨ᪠ ¤®á-ª®¬ ­¤
ld h,d
ld l,e
; hl=struct_input_line+5
ld b,(hl) ;+0 1-© ᨬ¢®«
inc hl
ld c,(hl) ;+1 2-© ᨬ¢®«
inc hl
ld a,(hl) ;+2 3-© ᨬ¢®«
or a ; § ¤ ­ ¤¨áª ⨯  "x:" ?
jr nz,A8376 ; ­¥â, ¨¬¥¥¬ ¡®«ìè¥ 2-å ᨬ¢®«®¢
ld a,":" ; ¯®áâä¨ªá ¡ãª¢ë ¤¨áª 
cp c ; 2-© ᨬ¢®«
jr nz,A8376 ; § ¤ ­ ­¥ ¤¨áª
ld a,b ; 1-© ᨬ¢®«
cp "a"
jr c,A8369
cp "z"+1
jr nc,A8369
and 5Fh ; a..z -> A..Z
A8369: sub "A" ; ­®¬¥à ¤¨áª 
ld c,Dss.ChDisk ; ᬥ­¨âì ⥪. ¤¨áª
RST ToDSS
jp c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï
; â¥áâ ­  áãé¥á⢮¢ ­¨¥ ¯ ¯ª¨ ­  楫¥¢®¬ ¤¨áª¥
ld hl,system_path ; ¡ãä¥à á¨áâ. ¯ãâ¨
ld c,Dss.ChDir ; ãáâ. ⥪. ¯ãâì
RST ToDSS
jp nc,save_disk_path ; Ok
; ãáâ. ª®à¥­ì, ­¥â â ª®© ¯ ¯ª¨ ­  ­®¢®¬ ¤¨áª¥
ld hl,system_path+1 ; ¡ãä¥à á¨áâ. ¯ãâ¨
ld (hl),0
dec hl
ld (hl),'\'
ld c,Dss.ChDir ; ãáâ. ⥪. ¯ãâì
RST ToDSS
jp c,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï
jp save_disk_path ; Ok
; § ¤ ­ ­¥ ¤¨áª
A8376: ex de,hl ; ¢®ááâ.  ¤à¥á ­ ç «  áâப¨
ld (D8374),hl ; struct_input_line+5
ld de,T8C1A ; ¡ãä¥à
ld bc,4*256 + Dss.EX_Path ; ¢ë¤¥«¨âì à áè. ä ©« 
RST ToDSS
ld hl,(D8374) ; ¨¬ï ä ©« 
jr c,A83D7 ; ¢ë¯®«­¨âì exe-ä ©«
bit 1,a ; ¥áâì à áè. ?
jr z,A839D ; ­¥â
; ¥áâì à áè. ä ©« 
ld de,T8C1A ; ¡ãä¥à à áè. ä ©« 
ld hl,T8C1E ; "BAT"
ld b,3 ; ¤«¨­  áà ¢­¥­¨ï
call A874E ; áà ¢­¨âì áâப¨
ld hl,(D8374)
jp z,A83E8 ; ¢ë¯®«­¨âì bat-ä ©« (batch.asm)
jr A83D7 ; ¢ë¯®«­¨âì exe-ä ©«
A839D: ld bc,0*256 + Dss.Exec ; § £à. ¨ ¢ë¯®«­¨âì ¯à®£à ¬¬ã
RST ToDSS
;R10
CALL Restore_Screen
;R10
ret nc ; Ok
ld hl,(D8374)
cp 3 ; ª®¤ ®è¨¡ª¨ "ä ©« ­¥ ®¡­ à㦥­"
jr nz,A83DD
push hl
;ld a,(D96AD) ;; ¤«¨­  áâப¨ (inline.asm)
ld a,(struct_input_line+4) ; ¤«¨­  áâப¨
ld b,a
A83AF: ld a,(hl)
cp " "+1
jr c,A83B7
inc hl
djnz A83AF
A83B7: ld e,b
ld d,0
add hl,de
push hl
ld e,4
add hl,de
pop de
ex de,hl
ld c,b
ld b,0
inc c
lddr
inc hl
ld (hl),"."
inc hl
ld (hl),"B"
inc hl
ld (hl),"A"
inc hl
ld (hl),"T"
pop hl
jp A83E8 ; ¢ë¯®«­¨âì bat-ä ©« (batch.asm)
; ‚믮«­¨âì exe-ä ©«
; hl=¨¬ï ä ©« 
A83D7: ld bc,0*256 + Dss.Exec ; § £à㧨âì ¯à®£à ¬¬ã, ¢ë¯®«­¨âì ä ©«
RST ToDSS
;R10
CALL Restore_Screen
;R10
ret nc
A83DD: cp DSS_Error.sys.INVALID_HANDLE ; ª®¤ ®è¨¡ª¨ "­¥â ¤¥áªà¨¯â®à "
jp nc,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï
xor a ; ¨­¤¥ªá "Bad command or file name"
jp print_err_message

1
SHELL/build.txt Normal file
View File

@ -0,0 +1 @@
55

22
SHELL/version.inc Normal file
View File

@ -0,0 +1,22 @@
;------------------[ „®áâ ñ¬ ⥪ãéãî ¤ âã ¨ BUILD++ ]-----------------[]
LUA PASS1
Console_build = increase_build("./SHELL/build.txt")
if Console_build > 999 then
Console_build = 999
print("WARNING! Build > 999","WARNING! Build > 999","WARNING! Build > 999","WARNING! Build > 999","\aWARNING! Build > 999\a")
end
ENDLUA
LUA ALLPASS
sj.insert_label("lua_BUILD", Console_build)
ENDLUA
;---------------------------------------------------------------------[]
;
; Shell full version
; ­®¬¥à ¢¥àᨨ (0..9)
CONSOLE_VERS EQU 1
; ­®¬¥à ¬®¤¨ä¨ª æ¨¨ (0..99)
CONSOLE_MODF EQU 2
; ­®¬¥à ¡¨«¤  (0..999)
CONSOLE_BUILD EQU lua_BUILD
;