Core: fixed error in EXEC, SYSTIME. Shell: CMD_DATE - printing day of week

This commit is contained in:
Anatoliy Belyanskiy 2024-01-26 00:44:27 +10:00
parent ec7682cf21
commit 43b8683575
16 changed files with 373 additions and 206 deletions

View File

@ -14,35 +14,35 @@ SYSTIME:
LD C,BIOS.CMOS_TEST LD C,BIOS.CMOS_TEST
RST ToBIOS RST ToBIOS
JP C,.NOCMOS JP C,.NOCMOS
LD D,7 ;DAY LD D,CMOS.Register.date
CALL RCMOS CALL RCMOS
PUSH AF PUSH AF
LD D,8 ;MONTH LD D,CMOS.Register.month
CALL RCMOS CALL RCMOS
POP DE POP DE
LD E,A LD E,A
PUSH DE PUSH DE
LD D,4 ;HOUR LD D,CMOS.Register.hours
CALL RCMOS CALL RCMOS
PUSH AF PUSH AF
LD D,2 ;MINUTE LD D,CMOS.Register.minutes
CALL RCMOS CALL RCMOS
POP DE POP DE
LD E,A LD E,A
PUSH DE PUSH DE
LD D,0 ;SECOND LD D,CMOS.Register.seconds
CALL RCMOS CALL RCMOS
PUSH AF PUSH AF
LD D,6 ;WEEK DAY LD D,CMOS.Register.dayOfWeek
LD C,BIOS.CMOS_RD LD C,BIOS.CMOS_RD
RST ToBIOS RST ToBIOS
POP DE POP DE
LD E,A LD E,A
PUSH DE PUSH DE
LD D,9 ;YEAR LD D,CMOS.Register.year
CALL RCMOS ;READ AND CONVERT TO DECIMAL CALL RCMOS ;READ AND CONVERT TO DECIMAL
PUSH AF PUSH AF
LD D,#32 ;CENTURY LD D,CMOS.Register.century
LD C,BIOS.CMOS_RD LD C,BIOS.CMOS_RD
RST ToBIOS RST ToBIOS
LD XH,A LD XH,A
@ -61,7 +61,7 @@ SYSTIME:
JR Z,.GOODAGE JR Z,.GOODAGE
.BADAGE: .BADAGE:
PUSH AF PUSH AF
LD D,#32 ;CENTURY LD D,CMOS.Register.century
LD C,BIOS.CMOS_WR LD C,BIOS.CMOS_WR
RST ToBIOS RST ToBIOS
POP AF POP AF
@ -122,35 +122,48 @@ SETTIME:
PUSH BC PUSH BC
PUSH HL PUSH HL
PUSH DE PUSH DE
;
; [ ] 25/01/2024
CALL CalcDayOfWeek
PUSH HL
;
LD C,BIOS.CMOS_TEST LD C,BIOS.CMOS_TEST
RST ToBIOS RST ToBIOS
JP C,.NOCMOS2 JR C,.NOCMOS2
;
; [ ] 25/01/2024
POP AF POP AF
PUSH AF LD D,CMOS.Register.dayOfWeek
LD D,7 ;DAY
CALL WCMOS
POP BC
LD A,C
LD D,8 ;MONTH
CALL WCMOS
POP AF
PUSH AF
LD D,4 ;HOUR
CALL WCMOS
POP BC
LD A,C
LD D,2 ;MINUTE
CALL WCMOS
POP AF
PUSH AF
LD D,0 ;SECOND
CALL WCMOS
POP BC
LD A,C
LD D,6 ;WEEK DAY
LD C,BIOS.CMOS_WR LD C,BIOS.CMOS_WR
RST ToBIOS RST ToBIOS
; ;
POP AF
PUSH AF
LD D,CMOS.Register.date
CALL WCMOS
POP BC
LD A,C
LD D,CMOS.Register.month
CALL WCMOS
POP AF
PUSH AF
LD D,CMOS.Register.hours
CALL WCMOS
POP BC
LD A,C
LD D,CMOS.Register.minutes
CALL WCMOS
POP AF
;PUSH AF ; [ ] ¡ £ á ãáâ ­®¢ª®© ¤­ï ­¥¤¥«¨ ¨§ ॣ¨áâà  C. <20> è¥« Hard
LD D,CMOS.Register.seconds
CALL WCMOS
; [ ] ¡ £ á ãáâ ­®¢ª®© ¤­ï ­¥¤¥«¨ ¨§ ॣ¨áâà  C. <20> è¥« Hard
;POP BC
;LD A,C
;LD D,CMOS.Register.dayOfWeek
;LD C,BIOS.CMOS_WR
;RST ToBIOS
;
POP HL POP HL
XOR A XOR A
LD DE,100 LD DE,100
@ -160,17 +173,23 @@ SETTIME:
ADD HL,DE ADD HL,DE
DEC A DEC A
PUSH HL PUSH HL
LD D,#32 ;CENTURY LD D,CMOS.Register.century
CALL WCMOS CALL WCMOS
POP BC POP BC
LD A,C LD A,C
LD D,9 ;YEAR LD D,CMOS.Register.year
CALL WCMOS CALL WCMOS
AND A AND A
RET RET
; !FIXIT ­®¢ë© ¡¨®á ¢ëáâ ¢«ï¥â ¢à¥¬ï, ¥á«¨ á ­¨¬ çâ®-â® ­¥ â ª. ; !FIXIT ­®¢ë© ¡¨®á ¢ëáâ ¢«ï¥â ¢à¥¬ï, ¥á«¨ á ­¨¬ çâ®-â® ­¥ â ª.
.NOCMOS2: .NOCMOS2:
LD C,0 POP AF
POP DE
POP HL
POP BC
POP IX
LD C,A
;
LD (SYSTIME.NC_DAY),DE ;DAY/MONTH LD (SYSTIME.NC_DAY),DE ;DAY/MONTH
LD (SYSTIME.NC_HOUR),HL ;HOUR/MINUTE LD (SYSTIME.NC_HOUR),HL ;HOUR/MINUTE
LD (SYSTIME.NC_SEC),BC ;SECOND/WEEKDAY LD (SYSTIME.NC_SEC),BC ;SECOND/WEEKDAY

View File

@ -303,10 +303,10 @@ OPENDIR:;!TEST ;[x] some optimize
LD (CORE_BUFFERS.FM_BUF + _sFM.F_SIZE),HL LD (CORE_BUFFERS.FM_BUF + _sFM.F_SIZE),HL
EX DE,HL EX DE,HL
; ;
CALL LOADDIR JP LOADDIR
; CF=0 ; CF=0
;AND A ;AND A
RET ;RET
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;

View File

@ -858,6 +858,7 @@ EXEC: LD (CMDLINE),HL
;LD HL,(CMDLINE) ;LD HL,(CMDLINE)
JR C,EXEC0_SHORT JR C,EXEC0_SHORT
.VAR_2: CALL EXEC_1 .VAR_2: CALL EXEC_1
;LD A,DSS_Error.sys.FILE_NOT_FOUND
SCF SCF
RET ; File not found - exit RET ; File not found - exit
@ -873,7 +874,7 @@ EXEC_1: ;LD (CMDLINE),HL
CALL MASK CALL MASK
RET C RET C
CALL TST_EXT CALL TST_EXT
LD A,DSS_Error.sys.FILE_NOT_FOUND ;LD A,DSS_Error.sys.FILE_NOT_FOUND
RET C RET C
_mINCTASK ;R08 _mINCTASK ;R08
CALL OPEN_FN.FILE CALL OPEN_FN.FILE
@ -914,6 +915,7 @@ COPYEXN: LD A,(HL)
CALL FINDPATH CALL FINDPATH
;[x] 1/10/2023 ;[x] 1/10/2023
LD A,DSS_Error.sys.FILE_NOT_FOUND
RET C RET C
; ;
LD HL,(CMDLINE) LD HL,(CMDLINE)

View File

@ -327,7 +327,7 @@ LOADDIR:
CALL MOVE_FP CALL MOVE_FP
SET_PAGE_X DIRPAGE SET_PAGE_X DIRPAGE
AND A
PUSH AF PUSH AF
;!TEST no ldir ;!TEST no ldir
; ®ç¨áâ¨âì ª¥è ª â «®£  ; ®ç¨áâ¨âì ª¥è ª â «®£ 
@ -349,11 +349,9 @@ LOADDIR:
LD DE,#4000 ; ᪮«ìª® LD DE,#4000 ; ᪮«ìª®
XOR A ; ¤¥áªà¨¯â®à XOR A ; ¤¥áªà¨¯â®à
CALL READ ; ç⥭¨¥ ¨§ ä ©«  CALL READ ; ç⥭¨¥ ¨§ ä ©« 
;!FIXIT 能恥丞<E681A5> <20> 株芋芥
LD (SAVEDIR.DIRSIZE),DE ; ç¨á«® ¯à®ç¨â. ¡ ©â®¢ LD (SAVEDIR.DIRSIZE),DE ; ç¨á«® ¯à®ç¨â. ¡ ©â®¢
POP AF POP AF
OUT (SLOT3),A OUT (SLOT3),A
AND A
RET RET
.LROTDIR: .LROTDIR:
LD HL,(FatBuffer.DIR_FRH) ; áâ. à §àï¤ LD HL,(FatBuffer.DIR_FRH) ; áâ. à §àï¤
@ -376,7 +374,6 @@ LOADDIR:
RST ToDSS.DRV RST ToDSS.DRV
POP AF POP AF
OUT (SLOT3),A OUT (SLOT3),A
AND A
RET RET
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
@ -650,7 +647,7 @@ RD_BPB: LD C,SLOT3
LD (FatBuffer.CLU_LEN),HL LD (FatBuffer.CLU_LEN),HL
EX DE,HL EX DE,HL
LD HL,#3FFF ;!TODO FATcacheSize LD HL,#3FFF ;!HARDCODE ;!TODO FATcacheSize
XOR A XOR A
;NEXTAD4 ;!FIXIT ®¯â¨¬¨§¨à®¢ âì ª®£¤  ¯®­ ¤®¡¨âáï ;NEXTAD4 ;!FIXIT ®¯â¨¬¨§¨à®¢ âì ª®£¤  ¯®­ ¤®¡¨âáï
.loop4: INC A .loop4: INC A

View File

@ -101,6 +101,110 @@ RMKTIME:
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
; [ ] 25/01/2024
; ¢å®¤: D - ¤¥­ì
; E - ¬¥áïæ
; IX - £®¤
; ¢ë室: H - ¤¥­ì ­¥¤¥«¨ (1 - ¢®áªà¥á¥­ì¥)
CalcDayOfWeek: ;!FIXIT ¢ëç¨á«ïâì ¤¥­ì ­¥¤¥«¨
; x = (14 ? ¬¥áïæ) / 12
; y = £®¤ ? x
; m = ¬¥áïæ + 12 * x ? 2
; „¥­ì<C2AD>¥¤¥«¨ = (7000 + (¤¥­ì + y + y/4 ? y/100 + y/400 + (31 * m)/12)) mod 7
; ‚ᥠ¤¥«¥­¨ï 楫®ç¨á«¥­­ë¥ (®áâ â®ª ®â¡à á뢠¥âáï).
;
LD A,D
LD (.day),A
; x = (14 ? ¬¥áïæ) / 12
; y = £®¤ ? x
LD A,E
CP 3
LD A,0
JR NC,1F
DEC IX
LD A,12
1: ; y = IX
; m = ¬¥áïæ + 12 * x ? 2
ADD E
SUB 2
; m = A
; HL = (31 * m)
LD D,0
LD E,A
RLA
RLA
RLA
LD H,D
LD L,A
ADD HL,HL
ADD HL,HL
SBC HL,DE
; (31 * m) = HL
; BC = (31 * m) / 12
LD B,H
LD C,L
; D=0
LD E,12
CALL BC_Div_DE
; (31 * m) / 12 = BC
LD (.m31_12),BC
; y / 4
PUSH IX
POP BC
; D=0
LD E,4
CALL BC_Div_DE
; y / 4 = BC
PUSH BC
; y / 100
PUSH IX
POP BC
; D=0
LD E,100
CALL BC_Div_DE
; y / 100 = BC
PUSH BC
; y / 400
PUSH IX
POP BC
LD DE,400
CALL BC_Div_DE
; y / 400 = BC
; y/400 - y/100
AND A
LD H,B
LD L,C
POP DE
SBC HL,DE
; y/400 - y/100 = HL
; y/4 ? y/100 + y/400
POP DE
ADD HL,DE
; y/4 ? y/100 + y/400 + (31 * m)/12
.m31_12+1: LD DE,0
ADD HL,DE
; y + y/4 ? y/100 + y/400 + (31 * m)/12
EX DE,HL
ADD IX,DE
; ¤¥­ì + y + y/4 ? y/100 + y/400 + (31 * m)/12
LD D,0
.day+1: LD E,0
ADD IX,DE
; 7000 + (¤¥­ì + y + y/4 ? y/100 + y/400 + (31 * m)/12)
LD DE,7000
ADD IX,DE
; (7000 + (¤¥­ì + y + y/4 ? y/100 + y/400 + (31 * m)/12)) mod 7
LD B,XH
LD C,XL
LD DE,7
CALL BC_Div_DE
; „¥­ì<C2AD>¥¤¥«¨ = L
LD H,L
INC H
RET
;----------------------------------------------------------------------;
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; a..z -> A..Z ; a..z -> A..Z
@ -190,6 +294,33 @@ HEX2BCD:
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; ;
;
;----------------------------------------------------------------------;
;BC/DE ==> BC, remainder in HL
; ­¥ ¯®àâ¨â DE
BC_Div_DE:
ld hl,0
ld a,b
ld b,16
;shift the bits from BC into HL
.div_loop:
sla c
rla
adc hl,hl
sbc hl,de
jr nc,.div_inc_acc
add hl,de
db $FE ;this begins the instruction `cp *`, so it eats the next byte.
.div_inc_acc:
inc c
djnz .div_loop
ld b,a
ret
;----------------------------------------------------------------------;
;
; HL:DE / C => DE:IX HL-OSTATOK (DE:BC.HL). ‹¥£ª® ¯¥à¥¤¥« âì ¯®¤ HL:DE / A => HL:DE.A ; HL:DE / C => DE:IX HL-OSTATOK (DE:BC.HL). ‹¥£ª® ¯¥à¥¤¥« âì ¯®¤ HL:DE / A => HL:DE.A
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
DIV_for_SPC: DIV_for_SPC:
@ -231,107 +362,106 @@ DIV_for_SPC:
; LD H,0 ; LD H,0
; LD L,A ; LD L,A
; RET ; RET
/*
DEFINE NEW_DIV 1
DIV32: LD XH,D ; DEFINE NEW_DIV 1
LD XL,E
IFN NEW_DIV ; DIV32: LD XH,D
EX DE,HL ; LD XL,E
LD HL,0
LD A,#20 ; IFN NEW_DIV
DIV001: ADD IX,IX ; EX DE,HL
EX DE,HL ; LD HL,0
ADC HL,HL ; LD A,#20
EX DE,HL ; DIV001: ADD IX,IX
ADC HL,HL ; EX DE,HL
SBC HL,BC ; ADC HL,HL
JR NC,DIV002 ; EX DE,HL
ADD HL,BC ; ADC HL,HL
DEC A ; SBC HL,BC
JR NZ,DIV001 ; JR NC,DIV002
RET ; ADD HL,BC
DIV002: INC IX ; DEC A
DEC A ; JR NZ,DIV001
JR NZ,DIV001 ; RET
RET ; DIV002: INC IX
ELSE ; DEC A
; JR NZ,DIV001
; RET
; ELSE
div32_16: ; div32_16:
;HLIX/BC -> HLIX remainder DE ; ;HLIX/BC -> HLIX remainder DE
;174+4*div32_16_sub8 ; ;174+4*div32_16_sub8
;min: 2186cc ; ;min: 2186cc
;max: 2794cc ; ;max: 2794cc
;avg: 2466cc ; ;avg: 2466cc
;61 bytes ; ;61 bytes
ex de,hl ; 4
; Negate BC to allow add instead of sbc
xor a ; 4
; Need to set HL to 0 anyways, so save 2cc and a byte
ld h,a ; 4
ld l,a ; 4
sub c ; 4
ld c,a ; 4
sbc a,a ; 4
sub b ; 4
ld b,a ; 4
ld a,d ; 4
call div32_16_sub8 ; 17
rla ; 4
ld d,a ; 4
ld a,e ; 4
call div32_16_sub8 ; 17
rla ; 4
ld e,a ; 4
ld a,ixh ; 8
call div32_16_sub8 ; 17
rla ; 4
ld ixh,a ; 8
ld a,ixl ; 8
call div32_16_sub8 ; 17
rla ; 4
ld ixl,a ; 8
; ex de,hl ; 4 ; ex de,hl ; 4
ret ; 10
div32_16_sub8: ; ; Negate BC to allow add instead of sbc
;119+8*div32_16_sub ; xor a ; 4
;min: 503cc ; ; Need to set HL to 0 anyways, so save 2cc and a byte
;max: 655cc ; ld h,a ; 4
;avg: 573cc ; ld l,a ; 4
call 1F ; sub c ; 4
1: ; ld c,a ; 4
;17+2(17+2(div32_16_sub))) ; sbc a,a ; 4
call 1F ; sub b ; 4
1: ; ld b,a ; 4
;17+2(div32_16_sub)
call div32_16_sub
div32_16_sub:
;48+{8,0+{0,19}}
;min: 48cc
;max: 67cc
;avg: 56.75cc
rla ; 4
adc hl,hl ; 15
jr c,1F ;12/7
add hl,bc ; 11
ret c ;11/5
sbc hl,bc ; 15
ret ; 10
1:
add hl,bc ; 11
scf ; 4
ret ; 10
ENDIF
*/ ; ld a,d ; 4
; call div32_16_sub8 ; 17
; rla ; 4
; ld d,a ; 4
; ld a,e ; 4
; call div32_16_sub8 ; 17
; rla ; 4
; ld e,a ; 4
; ld a,ixh ; 8
; call div32_16_sub8 ; 17
; rla ; 4
; ld ixh,a ; 8
; ld a,ixl ; 8
; call div32_16_sub8 ; 17
; rla ; 4
; ld ixl,a ; 8
; ;ex de,hl ; 4
; ret ; 10
; div32_16_sub8:
; ;119+8*div32_16_sub
; ;min: 503cc
; ;max: 655cc
; ;avg: 573cc
; call 1F
; 1:
; ;17+2(17+2(div32_16_sub)))
; call 1F
; 1:
; ;17+2(div32_16_sub)
; call div32_16_sub
; div32_16_sub:
; ;48+{8,0+{0,19}}
; ;min: 48cc
; ;max: 67cc
; ;avg: 56.75cc
; rla ; 4
; adc hl,hl ; 15
; jr c,1F ;12/7
; add hl,bc ; 11
; ret c ;11/5
; sbc hl,bc ; 15
; ret ; 10
; 1:
; add hl,bc ; 11
; scf ; 4
; ret ; 10
; ENDIF
; ;

View File

@ -1 +1 @@
831 843

View File

@ -29,7 +29,7 @@ echo_mode:
;------------------------------------------------- ;-------------------------------------------------
RUN_BAT: RUN_BAT:
call BATCH call BATCH
jp c,A83DD ; ®è¨¡ª  ®âªà. ä ©«  (cpp.asm) jp c,EXEERR ; ®ט¨<D798>×  ®ג×א. ה ©«  (cpp.asm)
ret ret
;------------------------------------------------- ;-------------------------------------------------

View File

@ -9,16 +9,14 @@
;/////////////////////////////////////////////////// ;///////////////////////////////////////////////////
cmd_date: cmd_date:
ex de,hl ; hl=ª®¬-áâப  ex de,hl ; hl=ª®¬-áâப 
;ld de,T9186 ; ¡ãä¥à
ld de,work_buffer1; ld de,work_buffer1;
ld c,Dss.GSwitch ; ¢ë¤¥«¨âì ¯ à ¬¥âà ª®¬-áâப¨ ld c,Dss.GSwitch ; ¢ë¤¥«¨âì ¯ à ¬¥âà ª®¬-áâப¨
RST ToDSS RST ToDSS
;ld de,T9186
ld de,work_buffer1; ld de,work_buffer1;
ld a,(de) ld a,(de)
or a or a
jr z,cmd_dt1 jr z,.cmd_dt1
call A893C call STR2DEC
jp c,invalid_param ; "Invalid parametr" jp c,invalid_param ; "Invalid parametr"
xor a xor a
cp h cp h
@ -28,7 +26,7 @@ cmd_date:
jp c,invalid_param ; "Invalid parametr" jp c,invalid_param ; "Invalid parametr"
ld b,l ld b,l
push bc push bc
call A893C call STR2DEC
pop bc pop bc
jp c,invalid_param ; "Invalid parametr" jp c,invalid_param ; "Invalid parametr"
xor a xor a
@ -39,7 +37,7 @@ cmd_date:
jp c,invalid_param ; "Invalid parametr" jp c,invalid_param ; "Invalid parametr"
ld c,l ld c,l
push bc push bc
call A893C call STR2DEC
push hl push hl
ld c,Dss.SysTime ld c,Dss.SysTime
RST ToDSS RST ToDSS
@ -47,30 +45,55 @@ cmd_date:
pop de pop de
ld c,Dss.SetTime ld c,Dss.SetTime
RST ToDSS RST ToDSS
cmd_dt1:ld c,Dss.SysTime .cmd_dt1:
ld c,Dss.SysTime
RST ToDSS RST ToDSS
PUSH BC ; [ ] ¢ë¢®¤ ¤­ï ­¥¤¥«¨ 26/01/2023
push ix push ix
push de push de
ld a,d ; ç¨á«® ld a,d ; ç¨á«®
ld hl,PRM1 ; ªã¤  ld hl,PRM1 ; ªã¤ 
call A8913 ; ¤¥áïâ. ¢ë¢®¤ ¢ ¡ãä¥à call PUTB ; ¤¥áïâ. ¢ë¢®¤ ¢ ¡ãä¥à
ld a,"." ld a,"."
ld (hl),a ld (hl),a
inc hl inc hl
pop de pop de
ld a,e ; ç¨á«® ld a,e ; ç¨á«®
call A8913 ; ¤¥áïâ. ¢ë¢®¤ ¢ ¡ãä¥à call PUTB ; ¤¥áïâ. ¢ë¢®¤ ¢ ¡ãä¥à
ld a,"." ld a,"."
ld (hl),a ld (hl),a
inc hl inc hl
push hl push hl
pop ix pop ix
pop hl pop hl
call A8964 call PDIGIT
; [ ] ¢ë¢®¤ ¤­ï ­¥¤¥«¨ 26/01/2023
POP DE
LD D,0
LD A,E
CP 8
JR C,.skip
LD E,8
.skip: LD HL,.days
LD BC,.days.size
CALL LCPIR
;
LD DE,PRM2
CALL ncopy_string
;
ld de,MAIN_MSG.DATE ; ¨­¤¥ªá "Current date: %1" ld de,MAIN_MSG.DATE ; ¨­¤¥ªá "Current date: %1"
jp MESSAGE ; ¢ë¢¥á⨠áâபã jp MESSAGE ; ¢ë¢¥á⨠áâபã
;
.days: DB 0
DZ "Sunday"
DZ "Monday"
DZ "Tuesday"
DZ "Wednesday"
DZ "Thursday"
DZ "Friday"
DZ "Saturday"
DZ "check CMOS!"
.days.size EQU $ - .days
;/////////////////////////////////////////////////// ;///////////////////////////////////////////////////
@ -89,7 +112,7 @@ cmd_time:
ld a,(de) ld a,(de)
or a or a
jr z,cmd_tm1 jr z,cmd_tm1
call A893C call STR2DEC
jp c,invalid_param ; "Invalid parametr" jp c,invalid_param ; "Invalid parametr"
xor a xor a
cp h cp h
@ -99,7 +122,7 @@ cmd_time:
jp c,invalid_param ; "Invalid parametr" jp c,invalid_param ; "Invalid parametr"
ld b,l ld b,l
push bc push bc
call A893C call STR2DEC
pop bc pop bc
jp c,invalid_param ; "Invalid parametr" jp c,invalid_param ; "Invalid parametr"
xor a xor a
@ -110,7 +133,7 @@ cmd_time:
jp c,invalid_param ; "Invalid parametr" jp c,invalid_param ; "Invalid parametr"
ld c,l ld c,l
push bc push bc
call A893C call STR2DEC
pop bc pop bc
jp c,invalid_param ; "Invalid parametr" jp c,invalid_param ; "Invalid parametr"
xor a xor a
@ -134,18 +157,18 @@ cmd_tm1:ld c,Dss.SysTime
push hl push hl
ld a,h ; ç¨á«® ld a,h ; ç¨á«®
ld hl,PRM1 ; ªã¤  ld hl,PRM1 ; ªã¤ 
call A8913 ; ¤¥áïâ. ¢ë¢®¤ ¢ ¡ãä¥à call PUTB ; ¤¥áïâ. ¢ë¢®¤ ¢ ¡ãä¥à
ld a,":" ld a,":"
ld (hl),a ld (hl),a
inc hl inc hl
pop de pop de
ld a,e ; ç¨á«® ld a,e ; ç¨á«®
call A8913 ; ¤¥áïâ. ¢ë¢®¤ ¢ ¡ãä¥à call PUTB ; ¤¥áïâ. ¢ë¢®¤ ¢ ¡ãä¥à
ld a,":" ld a,":"
ld (hl),a ld (hl),a
inc hl inc hl
pop af ; ç¨á«® pop af ; ç¨á«®
call A8913 ; ¤¥áïâ. ¢ë¢®¤ ¢ ¡ãä¥à call PUTB ; ¤¥áïâ. ¢ë¢®¤ ¢ ¡ãä¥à
xor a xor a
ld (hl),a ; ¢ ª®­¥æ áâப¨ ld (hl),a ; ¢ ª®­¥æ áâப¨
ld de,MAIN_MSG.TIME ; ¨­¤¥ªá "Current time: %1" ld de,MAIN_MSG.TIME ; ¨­¤¥ªá "Current time: %1"

View File

@ -146,7 +146,7 @@ cmd_dir:
; „¥áïâ¨ç­ë© ¢ë¢®¤ ; „¥áïâ¨ç­ë© ¢ë¢®¤
.print: ld hl,(D88DC) .print: ld hl,(D88DC)
ld ix,PRM1 ; ¡ãä¥à ld ix,PRM1 ; ¡ãä¥à
call A8964 call PDIGIT
; ;
ld hl,(D88DE) ; ¬«. à §àï¤ ld hl,(D88DE) ; ¬«. à §àï¤
exx exx
@ -209,7 +209,7 @@ cmd_dir:
; „¥áïâ¨ç­ë© ¢ë¢®¤ ; „¥áïâ¨ç­ë© ¢ë¢®¤
ld hl,(dir_number) ld hl,(dir_number)
ld ix,PRM3 ; ¡ãä¥à ld ix,PRM3 ; ¡ãä¥à
call A8964 call PDIGIT
;xor a ;xor a
;ld (de),a ;ld (de),a
; ;

View File

@ -13,14 +13,14 @@ cmd_echo:
push de push de
ld b,3 ; ¤«¨­  áà ¢­¥­¨ï ld b,3 ; ¤«¨­  áà ¢­¥­¨ï
ld hl,T8C21 ; "ON",0 ld hl,T8C21 ; "ON",0
call A874E ; áà ¢­¨âì áâப¨ call COMPARE ; áŕ ˘­¨âě áâப¨
pop de pop de
ld a,true ; ०¨¬ "on" ld a,true ; ०¨¬ "on"
jr z,A864B jr z,A864B
push de push de
ld b,4 ; ¤«¨­  áà ¢­¥­¨ï ld b,4 ; ¤«¨­  áà ¢­¥­¨ï
ld hl,T8C24 ; "OFF",0 ld hl,T8C24 ; "OFF",0
call A874E ; áà ¢­¨âì áâப¨ call COMPARE ; áŕ ˘­¨âě áâப¨
pop hl pop hl
ld a,false ; ०¨¬ "off" ld a,false ; ०¨¬ "off"
jr z,A864B jr z,A864B

View File

@ -1,5 +1,5 @@
; à ¡. ï祩ª  ; à ¡. ï祩ª 
D8374: dw 0 SAVEHL: dw 0
@ -92,26 +92,25 @@ COMP: call EVALCMD ; (batch.asm)
; § ¤ ­ ­¥ ¤¨áª ; § ¤ ­ ­¥ ¤¨áª
RUN_EXT: ex de,hl ; ¢®ááâ.  ¤à¥á ­ ç «  áâப¨ RUN_EXT: ex de,hl ; ¢®ááâ.  ¤à¥á ­ ç «  áâப¨
ld (D8374),hl ; struct_input_line+5 ld (SAVEHL),hl ; struct_input_line+5
ld de,T8C1A ; ¡ãä¥à ld de,EXTBF ; ¡ãä¥à
ld bc,4*256 + Dss.EX_Path ; ¢ë¤¥«¨âì à áè. ä ©«  ld bc,4*256 + Dss.EX_Path ; ¢ë¤¥«¨âì à áè. ä ©« 
RST ToDSS RST ToDSS
ld hl,(D8374) ; ¨¬ï ä ©«  ld hl,(SAVEHL) ; ¨¬ï ä ©« 
jr c,A83D7 ; ¢ë¯®«­¨âì exe-ä ©« jr c,RUN_EXE ; ¢ë¯®«­¨âì exe-ä ©«
bit 1,a ; ¥áâì à áè. ? bit 1,a ; ¥áâì à áè. ?
jr z,A839D ; ­¥â jr z,.NON_EXT ; ­¥â
; ¥áâì à áè. ä ©«  ; ¥áâì à áè. ä ©« 
ld de,T8C1A ; ¡ãä¥à à áè. ä ©«  ld de,EXTBF ; ¡ãä¥à à áè. ä ©« 
ld hl,T8C1E ; "BAT" ld hl,BATBF ; "BAT"
ld b,3 ; ¤«¨­  áà ¢­¥­¨ï ;!HARDCODE ld b,3 ; ¤«¨­  áà ¢­¥­¨ï ;!HARDCODE
call A874E ; áà ¢­¨âì áâப¨ call COMPARE ; áà ¢­¨âì áâப¨
ld hl,(D8374) ld hl,(SAVEHL)
jp z,RUN_BAT ; ¢ë¯®«­¨âì bat-ä ©« (batch.asm) jp z,RUN_BAT ; ¢ë¯®«­¨âì bat-ä ©« (batch.asm)
jr A83D7 ; ¢ë¯®«­¨âì exe-ä ©« jr RUN_EXE ; ¢ë¯®«­¨âì exe-ä ©«
.NON_EXT:
A839D: ld bc,0*256 + Dss.Exec ; § £à. ¨ ¢ë¯®«­¨âì ¯à®£à ¬¬ã ld bc,0*256 + Dss.Exec ; § £à. ¨ ¢ë¯®«­¨âì ¯à®£à ¬¬ã
RST ToDSS RST ToDSS
;[x] 01/11/23 ;!TEST ;[x] 01/11/23 ;!TEST
PUSH AF PUSH AF
CALL RESTORE_ALL CALL RESTORE_ALL
@ -120,20 +119,19 @@ A839D: ld bc,0*256 + Dss.Exec ;
;[x] 25/10/23 ;[x] 25/10/23
JP NC,Ret_New_Line ; Ok JP NC,Ret_New_Line ; Ok
; ;
ld hl,(SAVEHL)
ld hl,(D8374)
cp DSS_Error.sys.FILE_NOT_FOUND cp DSS_Error.sys.FILE_NOT_FOUND
jr nz,A83DD jr nz,EXEERR
push hl push hl
;ld a,(D96AD) ; ¤«¨­  áâப¨ (inline.asm) ;ld a,(D96AD) ; ¤«¨­  áâப¨ (inline.asm)
ld a,(struct_input_line+4) ; ¤«¨­  áâப¨ ld a,(struct_input_line+4) ; ¤«¨­  áâப¨
ld b,a ld b,a
A83AF: ld a,(hl) .loop: ld a,(hl)
cp " "+1 cp " "+1
jr c,A83B7 jr c,.next
inc hl inc hl
djnz A83AF djnz .loop
A83B7: ld e,b .next: ld e,b
ld d,0 ld d,0
add hl,de add hl,de
push hl push hl
@ -159,7 +157,8 @@ A83B7: ld e,b
; ‚믮«­¨âì exe-ä ©« ; ‚믮«­¨âì exe-ä ©«
; hl=¨¬ï ä ©«  ; hl=¨¬ï ä ©« 
A83D7: ld bc,0*256 + Dss.Exec ; § £à㧨âì ¯à®£à ¬¬ã, ¢ë¯®«­¨âì ä ©« RUN_EXE:
ld bc,0*256 + Dss.Exec ; § £à㧨âì ¯à®£à ¬¬ã, ¢ë¯®«­¨âì ä ©«
RST ToDSS RST ToDSS
;[x] 01/11/23 ;!TEST ;[x] 01/11/23 ;!TEST
@ -171,7 +170,7 @@ A83D7: ld bc,0*256 + Dss.Exec ;
;[x] 25/10/23 ;[x] 25/10/23
JP NC,Ret_New_Line ; Ok JP NC,Ret_New_Line ; Ok
; ;
A83DD: cp DSS_Error.sys.INVALID_HANDLE ; ª®¤ ®è¨¡ª¨ "­¥â ¤¥áªà¨¯â®à " EXEERR: cp DSS_Error.sys.INVALID_HANDLE ; ª®¤ ®è¨¡ª¨ "­¥â ¤¥áªà¨¯â®à "
jp nc,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï jp nc,print_err_message ; ¢ë¢®¤ á®®¡é¥­¨ï
xor a ; ¨­¤¥ªá "Bad command or file name" xor a ; ¨­¤¥ªá "Bad command or file name"
jp print_err_message jp print_err_message

View File

@ -32,7 +32,7 @@ MAIN_MSG:
db "Volume Serial Number is %2",CR,LF db "Volume Serial Number is %2",CR,LF
db CR,LF,"Directory of %3",CR,LF,LF,0 db CR,LF,"Directory of %3",CR,LF,LF,0
stN .VERS_ : db "Estex DSS version %1. Shell version %2.",CR,LF,0 ;R13 stN .VERS_ : db "Estex DSS version %1. Shell version %2.",CR,LF,0 ;R13
stN .DATE_ : db "Current date: %1",CR,LF,0 stN .DATE_ : db "Current date: %1, %2",CR,LF,0 ; [ ] ¢ë¢®¤ ¤­ï ­¥¤¥«¨ 26/01/2023
stN .TIME_ : db "Current time: %1",CR,LF,0 stN .TIME_ : db "Current time: %1",CR,LF,0
stN .PAUSE_ : db "Press any key to continue . . .",CR,0 stN .PAUSE_ : db "Press any key to continue . . .",CR,0
stN .INV_ : db "Invalid parametr",CR,LF,0 stN .INV_ : db "Invalid parametr",CR,LF,0

View File

@ -26,7 +26,7 @@ hex8: push af
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
;!FIXIT ¥áâì ¤ã¡«ì hex2dec_ascii_16bit ;!FIXIT ¥áâì ¤ã¡«ì PDIGIT
; ¢å®¤: hl=ç¨á«®, de=¡ãä¥à ; ¢å®¤: hl=ç¨á«®, de=¡ãä¥à
hex2dec_ascii_16bit: hex2dec_ascii_16bit:
.n10: ld ix,.tmp1 .n10: ld ix,.tmp1

View File

@ -359,17 +359,18 @@ newline: push hl
; in: de=string1 ; in: de=string1
; hl=string2 ; hl=string2
; b=¤«¨­  áâப¨ ; b=¤«¨­  áâப¨
A874E: ld a,(de) COMPARE:
ld a,(de)
cp "a" cp "a"
jr c,$+8 jr c,.next
cp "z"+1 cp "z"+1
jr nc,$+4 jr nc,.next
and 5Fh ; a..z -> A..Z and 5Fh ; a..z -> A..Z
cp (hl) .next: cp (hl)
ret nz ret nz
inc hl inc hl
inc de inc de
djnz A874E djnz COMPARE
ret ret
@ -401,10 +402,10 @@ copy_string:
; „¥áïâ¨ç­ë© ¢ë¢®¤ ¢ ¡ãä¥à ; „¥áïâ¨ç­ë© ¢ë¢®¤ ¢ ¡ãä¥à
; ¢å®¤: a=ç¨á«® ; ¢å®¤: a=ç¨á«®
; hl=¡ãä¥à ; hl=¡ãä¥à
A8913: ld c,2Fh PUTB: ld c,2Fh
inc c .loop: inc c
sub 10 sub 10
jr nc,$-3 jr nc,.loop
add a,10 add a,10
add a,"0" add a,"0"
push af push af
@ -418,8 +419,9 @@ A8913: ld c,2Fh
A893C: ld hl,0 STR2DEC:
A893F: ld a,(de) ld hl,0
.loop: ld a,(de)
inc de inc de
or a or a
ret z ret z
@ -435,17 +437,15 @@ A893F: ld a,(de)
add hl,hl add hl,hl
add hl,bc add hl,bc
add hl,hl add hl,hl
call A895A call .ATODEC
ret c ret c
add a,l add a,l
ld l,a ld l,a
jr nc,A893F jr nc,.loop
inc h inc h
jr A893F jr .loop
.ATODEC:; char -> int
cp "0"
; char -> int
A895A: cp "0"
ret c ret c
cp "9"+1 cp "9"+1
ccf ccf
@ -453,17 +453,17 @@ A895A: cp "0"
sub "0" sub "0"
ret ret
;!FIXIT ¥áâì ¤ã¡« ;!FIXIT ¥áâì ¤ã¡« hex2dec_ascii_16bit
A8964: ld de,10000 PDIGIT: ld de,10000
ld a,#C8 ; ret z ld a,#C8 ; ret z
ld (D8996),a ld (.patch),a
call A898E call .DIG
ld de,1000 ld de,1000
call A898E call .DIG
ld de,100 ld de,100
call A898E call .DIG
ld de,10 ld de,10
call A898E call .DIG
ld a,l ld a,l
add a,"0" add a,"0"
;!TEST ;!TEST
@ -474,20 +474,18 @@ A8964: ld de,10000
LD (IX+1),0 LD (IX+1),0
; ;
ret ret
.DIG: xor a
A898E: xor a
inc a inc a
sbc hl,de sbc hl,de
jr nc,$-3 jr nc,$-3
add hl,de add hl,de
dec a dec a
D8996: ret z .patch: ret z
add a,"0" add a,"0"
ld (ix+0),a ld (ix+0),a
inc ix inc ix
xor a ; nop xor a ; nop
ld (D8996),a ld (.patch),a
ret ret
@ -522,11 +520,10 @@ RUNMODE: db 0
; ¡ãä¥à à áè. ä ©«  ; ¡ãä¥à à áè. ä ©«  á ®£à ­¨ç¨â¥«¥¬ 0
T8C1A: ds 3 EXTBF: BLOCK 4,0
db 0
T8C1E: db "BAT" ; à áè. bat-ä ©«  BATBF: db "BAT" ; à áè. bat-ä ©« 
T8C21: db "ON",0 T8C21: db "ON",0
T8C24: db "OFF",0 T8C24: db "OFF",0

View File

@ -1 +1 @@
297 303

@ -1 +1 @@
Subproject commit a6dee8e17ae12b251f306290793a56a6b0dd5ae3 Subproject commit e7e58e7b816a25137a0a253321164e863bbe782e