mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 01:11:48 +03:00
348 lines
5.6 KiB
NASM
348 lines
5.6 KiB
NASM
;!TODO Procedures
|
||
;----------------------------------------------------------------------;
|
||
; ‡ ª®¤¨à®¢ âì ¢à¥¬ï/¤ âã
|
||
; ¢å®¤: de - ¤¥ì/¬¥áïæ
|
||
; hl - ç áë/¬¨ãâë
|
||
; b - ᥪã¤ë
|
||
; ix - £®¤
|
||
; ¢ë室: de - ¢à¥¬ï
|
||
; bc - ¬¥áïæ/¤¥ì
|
||
; ix - £®¤
|
||
;
|
||
;INPUT: D - DAY; E - MONTH
|
||
; H - HOUR; L - MINUTE
|
||
; B - SECOND (0...59)
|
||
; IX- YEAR (0...65535)
|
||
;OUTPUT: DE - hhhhhmmmmmmsssss h - hour, m - min, s - sec/2
|
||
; BC - yyyyyyymmmmddddd y - year, m - month, d - day
|
||
; (1980-2108)
|
||
MK_TIME:
|
||
LD A,L
|
||
RLCA
|
||
RLCA
|
||
SLA A
|
||
RL H
|
||
SLA A
|
||
RL H
|
||
SLA A
|
||
RL H
|
||
SRL B
|
||
OR B
|
||
LD L,A
|
||
|
||
LD BC,#F844 ;(-1980)
|
||
ADD IX,BC
|
||
LD A,E
|
||
RLCA
|
||
RLCA
|
||
RLCA
|
||
RLCA
|
||
AND #F0
|
||
LD B,XL
|
||
SLA A
|
||
RL B
|
||
OR D
|
||
LD C,A
|
||
EX DE,HL
|
||
AND A
|
||
RET
|
||
;----------------------------------------------------------------------;
|
||
|
||
;!TODO Procedures
|
||
;----------------------------------------------------------------------;
|
||
; <20> ᪮¤¨à®¢ âì ¢à¥¬ï/¤ âã
|
||
; ¢å®¤: de - ¢à¥¬ï
|
||
; bc - ¬¥áïæ/¤¥ì
|
||
; ix - £®¤
|
||
; ¢ë室: de - ¤¥ì/¬¥áïæ
|
||
; hl - ç áë/¬¨ãâë
|
||
; b - ᥪã¤ë
|
||
; ix - £®¤
|
||
;
|
||
;INPUT: DE - hhhhhmmmmmmsssss h - hour, m - min, s - sec/2
|
||
; BC - yyyyyyymmmmddddd y - year, m - month, d - day
|
||
; (1980-2108)
|
||
;OUTPUT: D - DAY; E - MONTH
|
||
; H - HOUR; L - MINUTE
|
||
; B - SECOND (0...59)
|
||
; IX- YEAR (0...65535)
|
||
RMKTIME:
|
||
EX DE,HL
|
||
LD A,C
|
||
AND #1F
|
||
LD D,A
|
||
SRL B
|
||
RR C
|
||
LD A,C
|
||
RRCA
|
||
RRCA
|
||
RRCA
|
||
RRCA
|
||
AND #0F
|
||
LD E,A
|
||
LD C,B
|
||
LD B,0
|
||
LD IX,1980
|
||
ADD IX,BC
|
||
LD A,L
|
||
AND #1F
|
||
ADD A,A
|
||
LD B,A
|
||
SRL H
|
||
RR L
|
||
SRL H
|
||
RR L
|
||
SRL H
|
||
RR L
|
||
SRL L
|
||
SRL L
|
||
AND A
|
||
RET
|
||
;----------------------------------------------------------------------;
|
||
|
||
|
||
;----------------------------------------------------------------------;
|
||
; [ ] 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
|
||
UPPER: CP 'a'
|
||
RET C
|
||
CP 'z' + 1
|
||
JR NC,.MDUPPER
|
||
SUB #20
|
||
.NOUPPER:
|
||
RET
|
||
.MDUPPER:
|
||
CP ' ' ; àãááª ï ¡ãª¢ , ª®¤ #A0
|
||
JR C,.NOUPPER
|
||
CP '¯' ; àãááª ï ¡ãª¢ ¯, ª®¤ #B0
|
||
JR NC,.BGUPPER
|
||
SUB #20
|
||
RET
|
||
.BGUPPER:
|
||
CP 'à' ; àãááª ï ¡ãª¢ à, ª®¤ #E0
|
||
JR C,.NOUPPER
|
||
CP 'ð' ; àãááª ï ¡ãª¢ ð, ª®¤ #F0
|
||
JR NC,.HGUPPER
|
||
SUB #50
|
||
RET
|
||
.HGUPPER: CP 'ñ' ; àãááª ï ¡ãª¢ ñ, ª®¤ #F1
|
||
RET NZ
|
||
DEC A
|
||
RET
|
||
;----------------------------------------------------------------------;
|
||
|
||
|
||
|
||
;!TODO hardware
|
||
;----------------------------------------------------------------------;
|
||
; —⥨¥ ॣ¨áâ஢ CMOS
|
||
; ¢å®¤: d=®¬¥à ॣ¨áâà
|
||
RCMOS: LD C,BIOS.CMOS_RD
|
||
RST ToBIOS
|
||
;JP BCD2HEX
|
||
; INPUT : A - BCD
|
||
; OUTPUT: A - HEX
|
||
BCD2HEX:
|
||
LD E,A
|
||
RRCA
|
||
RRCA
|
||
RRCA
|
||
RRCA
|
||
AND #0F
|
||
LD D,A
|
||
ADD A,A
|
||
ADD A,A
|
||
ADD A,D
|
||
ADD A,A
|
||
LD D,A
|
||
LD A,E
|
||
AND #0F
|
||
ADD A,D
|
||
RET
|
||
;----------------------------------------------------------------------;
|
||
|
||
;!TODO hardware
|
||
;----------------------------------------------------------------------;
|
||
;!FIXIT ¯¥à¥¤¥« âì ¯® ¤®ª¥ „ «« á ¨ § ¯¨áì ¢ ï祩ª¨ ç ᮢ
|
||
; ‡ ¯¨áì ॣ¨áâ஢ CMOS
|
||
; ¢å®¤: d=®¬¥à ॣ¨áâà
|
||
WCMOS: CALL HEX2BCD
|
||
LD C,BIOS.CMOS_WR
|
||
JP ToBIOS
|
||
|
||
; INPUT : A - HEX
|
||
; OUTPUT: A - BCD
|
||
HEX2BCD:
|
||
LD BC,#0AFF
|
||
.loop: INC C
|
||
SUB B
|
||
JR NC,.loop
|
||
ADD A,B
|
||
LD B,A
|
||
LD A,C
|
||
RLCA
|
||
RLCA
|
||
RLCA
|
||
RLCA
|
||
AND #F0
|
||
OR B
|
||
RET
|
||
;----------------------------------------------------------------------;
|
||
;
|
||
|
||
|
||
;
|
||
;----------------------------------------------------------------------;
|
||
;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 / A => DE:BC, H=0, L - ®áâ ⮪
|
||
DIV_for_SPC:
|
||
LD C,A
|
||
DEC A
|
||
JR Z,.exit
|
||
;
|
||
AND E
|
||
LD B,A ; ®áâ ⮪
|
||
LD A,C
|
||
RRCA
|
||
;
|
||
.loop: SRL H
|
||
RR L
|
||
RR D
|
||
RR E
|
||
RRCA
|
||
JP NC,.loop
|
||
LD A,B
|
||
.exit: LD B,D
|
||
LD C,E
|
||
EX DE,HL
|
||
LD H,0
|
||
LD L,A
|
||
RET
|
||
;----------------------------------------------------------------------; |