;!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 ;----------------------------------------------------------------------; ; Раскодировать время/дату ; вход: 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 ;----------------------------------------------------------------------; ;----------------------------------------------------------------------; ; 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 ;----------------------------------------------------------------------; ;