From 8590a76bcc7cbe1443abf37498f824a0eab0c8d7 Mon Sep 17 00:00:00 2001 From: Leo C Date: Thu, 28 May 2015 22:56:55 +0200 Subject: [PATCH] Server: get_time command/response --- avr/z180-serv.c | 13 + z180/ddtz.180 | 1074 +++++++++++++++++++++++----------------------- z180/z180reg.inc | 2 +- 3 files changed, 552 insertions(+), 537 deletions(-) diff --git a/avr/z180-serv.c b/avr/z180-serv.c index bf49a6c..c7869a6 100644 --- a/avr/z180-serv.c +++ b/avr/z180-serv.c @@ -111,6 +111,16 @@ void do_msg_echo(uint8_t subf, int len, uint8_t * msg) msg_xmit(1, 3, len, msg); } +/* get timer */ +void do_msg_get_timer(uint8_t subf, int len, uint8_t * msg) +{ + (void)len; (void)msg; + + uint32_t time_ms = get_timer(0); + + msg_xmit(3, subf, sizeof(time_ms), (uint8_t *) &time_ms); +} + /* ---------------------------------------------------------------------------*/ #define MAX_DRIVE 4 @@ -381,6 +391,9 @@ const FLASH struct msg_item z80_messages[] = { 2, 1, 2, do_msg_cpm_rw}, + { 3, + 1, 1, + do_msg_get_timer}, { 0xff, /* end mark */ 0, 0, 0}, diff --git a/z180/ddtz.180 b/z180/ddtz.180 index e8a26fd..aa4e977 100644 --- a/z180/ddtz.180 +++ b/z180/ddtz.180 @@ -957,449 +957,450 @@ do_op_mod: ex de,hl jr l0b58h +; divide x/y +; x: hl +; y: de +; return: +; x/y: hl +; rem: de + DIV_HL_DE: - push bc - ex de,hl - ld b,h - ld c,l - ld hl,0 - ld a,16 + push bc + ex de,hl ;de = x, hl = y + ld b,h ;bc = y + ld c,l + ld hl,0 ;r = 0 + ld a,16 ;count l0b89h: - push af - add hl,hl - ex de,hl - xor a - add hl,hl - ex de,hl - adc a,l - sub c - ld l,a - ld a,h - sbc a,b - ld h,a - inc de - jr nc,l0b9ah - add hl,bc - dec de -l0b9ah: - pop af - dec a - jr nz,l0b89h - ex de,hl - pop bc + ex de,hl ;x + add hl,hl ;x <<= 1 + ex de,hl ;r + adc hl,hl ;r <<= 1 + + or a + sbc hl,bc + inc de + jr nc,div_no_restore + add hl,bc + dec de +div_no_restore: + dec a + jr nz,l0b89h + ex de,hl + pop bc ret do_op_and: - ld a,h - and d - ld h,a - ld a,l - and e - ld l,a - jr l0b58h + ld a,h + and d + ld h,a + ld a,l + and e + ld l,a + jr l0b58h do_op_or: - ld a,h - or d - ld h,a - ld a,l - or e - ld l,a - jr l0b58h + ld a,h + or d + ld h,a + ld a,l + or e + ld l,a + jr l0b58h do_op_xor: - ld a,h - xor d - ld h,a - ld a,l - xor e - ld l,a - jr l0b58h + ld a,h + xor d + ld h,a + ld a,l + xor e + ld l,a + jr l0b58h do_binary_op: - push hl - ld hl,tab_op_a - call lookupch - ld a,b - ld hl,tab_func_opa - add a,a - call ADD_HL_A - ld c,(hl) - inc hl - ld b,(hl) - pop hl + push hl + ld hl,tab_op_a + call lookupch + ld a,b + ld hl,tab_func_opa + add a,a + call ADD_HL_A + ld c,(hl) + inc hl + ld b,(hl) + pop hl ret tab_op_a: DB '+-*/%&!#',0 tab_func_opa: - defw do_op_add - defw do_op_sub - defw do_op_mlt - defw do_op_div - defw do_op_mod - defw do_op_and - defw do_op_or - defw do_op_xor - defw 0 + defw do_op_add + defw do_op_sub + defw do_op_mlt + defw do_op_div + defw do_op_mod + defw do_op_and + defw do_op_or + defw do_op_xor + defw 0 fact_factor: - call do_factor - ret nc - jp ERROR + call do_factor + ret nc + jp ERROR do_factor: - call chk.sp - call get.number - ret nc - inc de - ld hl,TOPRAM - cp 'T' - ret z - ld hl,(HILOD) - cp 'H' - ret z - ld hl,(MAXLOD) - cp 'M' - ret z - ld hl,TPA - cp 'L' - ret z - ld hl,(offs.@) - cp '@' - ret z - ld hl,(OFFS.pc) - cp '$' - ret z - cp '-' - jr z,fact_factneg - cp '~' - jr z,fact_factinv - cp '+' - jr z,fact_factor - cp '^' - jr z,fact_reg.CPU - cp 'Y' - jr z,fact_reg.Y - cp '(' - jr z,fact_mem - cp '[' - jp z,EXPR_BRCKT ;0c35 [ expression ] - cp '''' - jr z,fact_factstring - dec de + call chk.sp + call get.number + ret nc + inc de + ld hl,TOPRAM + cp 'T' + ret z + ld hl,(HILOD) + cp 'H' + ret z + ld hl,(MAXLOD) + cp 'M' + ret z + ld hl,TPA + cp 'L' + ret z + ld hl,(offs.@) + cp '@' + ret z + ld hl,(OFFS.pc) + cp '$' + ret z + cp '-' + jr z,fact_factneg + cp '~' + jr z,fact_factinv + cp '+' + jr z,fact_factor + cp '^' + jr z,fact_reg.CPU + cp 'Y' + jr z,fact_reg.Y + cp '(' + jr z,fact_mem + cp '[' + jp z,EXPR_BRCKT ;0c35 [ expression ] + cp '''' + jr z,fact_factstring + dec de scf ret fact_reg.Y: - call get.decdigit - jp c,ERROR - inc de - add a,a - ld hl,reg.Y - call ADD_HL_A - ld a,(hl) - inc hl - ld h,(hl) - ld l,a - and a + call get.decdigit + jp c,ERROR + inc de + add a,a + ld hl,reg.Y + call ADD_HL_A + ld a,(hl) + inc hl + ld h,(hl) + ld l,a + and a ret fact_factstring: - ld hl,0 + ld hl,0 l0c56h: - ld a,(de) - cp '''' - jr z,l0c62h - and a - ret z + ld a,(de) + cp '''' + jr z,l0c62h + and a + ret z l0c5dh: - ld h,l - ld l,a - inc de - jr l0c56h + ld h,l + ld l,a + inc de + jr l0c56h l0c62h: - inc de - ld a,(de) - cp '''' - jr z,l0c5dh - sub '.' - or a - ret nz - inc de - set 7,l + inc de + ld a,(de) + cp '''' + jr z,l0c5dh + sub '.' + or a + ret nz + inc de + set 7,l ret fact_reg.CPU: - call sub_1315h - jr nc,l0cbbh - ld a,(hl) - inc hl - ld h,(hl) - ld l,a - and a - bit 0,c - ret nz - ld h,000h + call sub_1315h + jr nc,l0cbbh + ld a,(hl) + inc hl + ld h,(hl) + ld l,a + and a + bit 0,c + ret nz + ld h,000h ret fact_factneg: - call fact_factor - dec hl + call fact_factor + dec hl cpl.hl: - ld a,h + ld a,h cpl - ld h,a - ld a,l + ld h,a + ld a,l cpl - ld l,a + ld l,a ret fact_factinv: - call fact_factor - jr cpl.hl + call fact_factor + jr cpl.hl fact_mem: - call EXPR1 - jr c,l0cbbh - ld a,(de) - cp ')' - jr nz,l0cbbh - inc de + call EXPR1 + jr c,l0cbbh + ld a,(de) + cp ')' + jr nz,l0cbbh + inc de comst - ld a,(hl) - inc hl ; - ld h,(hl) ; + ld a,(hl) + inc hl ; + ld h,(hl) ; comend - ld l,a - ld a,(de) - inc de - cp '.' - ret z - dec de - xor a - ld h,a + ld l,a + ld a,(de) + inc de + cp '.' + ret z + dec de + xor a + ld h,a ret EXPR_BRCKT: - call EXPR1 - jr c,l0cbbh - ld a,(de) - cp ']' - inc de - ret z + call EXPR1 + jr c,l0cbbh + ld a,(de) + cp ']' + inc de + ret z l0cbbh: - jp ERROR + jp ERROR get.number: - call get.hexdigit - ret c - push de + call get.hexdigit + ret c + push de l0cc3h: - inc de - call get.hexdigit - jr nc,l0cc3h - pop de - cp '.' - jr z,l0d04h - cp '"' - jr z,l0ce9h - ld hl,0 + inc de + call get.hexdigit + jr nc,l0cc3h + pop de + cp '.' + jr z,l0d04h + cp '"' + jr z,l0ce9h + ld hl,0 l0cd5h: - call get.hexdigit - jr c,l0ce4h - add hl,hl - add hl,hl - add hl,hl - add hl,hl - call ADD_HL_A - inc de - jr l0cd5h + call get.hexdigit + jr c,l0ce4h + add hl,hl + add hl,hl + add hl,hl + add hl,hl + call ADD_HL_A + inc de + jr l0cd5h l0ce4h: - xor 'H' - ret nz - inc de + xor 'H' + ret nz + inc de ret l0ce9h: - ld hl,0 + ld hl,0 l0cech: - call get.decdigit + call get.decdigit l0cefh: - inc de - jr c,l0cf8h - add hl,hl - call ADD_HL_A - jr l0cech + inc de + jr c,l0cf8h + add hl,hl + call ADD_HL_A + jr l0cech l0cf8h: - cp '"' - jp nz,ERROR - call get.decdigit - jr nc,l0cefh - or a + cp '"' + jp nz,ERROR + call get.decdigit + jr nc,l0cefh + or a ret l0d04h: - ld hl,0 + ld hl,0 l0d07h: - call get.decdigit - inc de - jr c,l0d1ah - push bc - add hl,hl ;0d0e hl *= 10 - ld b,h - ld c,l - add hl,hl - add hl,hl - add hl,bc - pop bc - call ADD_HL_A - jr l0d07h + call get.decdigit + inc de + jr c,l0d1ah + push bc + add hl,hl ;0d0e hl *= 10 + ld b,h + ld c,l + add hl,hl + add hl,hl + add hl,bc + pop bc + call ADD_HL_A + jr l0d07h l0d1ah: - cp '.' - ret z - jp ERROR + cp '.' + ret z + jp ERROR sub_0d20h: - ld a,(de) - cp 05bh - jr l0d28h + ld a,(de) + cp 05bh + jr l0d28h get.hexdigit: - ld a,(de) + ld a,(de) sub_0d26h: - cp 'F'+1 + cp 'F'+1 l0d28h: ccf - ret c - cp 'A' - jr c,l0d32h - sub 'A'-10 + ret c + cp 'A' + jr c,l0d32h + sub 'A'-10 ret get.decdigit: - ld a,(de) + ld a,(de) l0d32h: - cp '9'+1 - jr l0d39h + cp '9'+1 + jr l0d39h get.bindigit: - ld a,(de) - cp '1'+1 + ld a,(de) + cp '1'+1 l0d39h: ccf - ret c - cp '0' - ret c - sub '0' + ret c + cp '0' + ret c + sub '0' ret l0d41h: - call assert_eol + call assert_eol prnt_cpustat: - call prnt_f - call outbl2 - ld hl,b_0x0DFD_start - ld de,b_0x0E1D_start - ld b,006h + call prnt_f + call outbl2 + ld hl,b_0x0DFD_start + ld de,b_0x0E1D_start + ld b,006h l0d52h: - call prnt_regs - djnz l0d52h - push hl - push de - ld iy,(REG.PC) - call sub_1f77h + call prnt_regs + djnz l0d52h + push hl + push de + ld iy,(REG.PC) + call sub_1f77h exx - ex af,af' - call CRLF - call prnt_f2 - call outbl2 - pop de - pop hl - ld b,007h + ex af,af' + call CRLF + call prnt_f2 + call outbl2 + pop de + pop hl + ld b,007h l0d6fh: - call prnt_regs - djnz l0d6fh + call prnt_regs + djnz l0d6fh exx - ex af,af' - and a - jr z,l0d7fh - call outbl6 - call sub_1f5bh + ex af,af' + and a + jr z,l0d7fh + call outbl6 + call sub_1f5bh l0d7fh: - jp crlf + jp crlf prnt_f: - ld a,(reg.f) - call prnt_flags - ld a,(reg.iff) - cp 0f3h - jp z,outbl - ld a,'E' - jp outchar + ld a,(reg.f) + call prnt_flags + ld a,(reg.iff) + cp 0f3h + jp z,outbl + ld a,'E' + jp outchar prnt_f2: - ld a,(reg.f2) - call prnt_flags - jp outbl + ld a,(reg.f2) + call prnt_flags + jp outbl prnt_flags: - ld b,a - ld a,'S' - call sub_0dbeh - ld a,'Z' - call sub_0dbeh - rl b - ld a,'H' - call sub_0dbeh - rl b - ld a,'V' - call sub_0dbeh - ld a,'N' - call sub_0dbeh - ld a,'C' + ld b,a + ld a,'S' + call sub_0dbeh + ld a,'Z' + call sub_0dbeh + rl b + ld a,'H' + call sub_0dbeh + rl b + ld a,'V' + call sub_0dbeh + ld a,'N' + call sub_0dbeh + ld a,'C' sub_0dbeh: - rl b - jp c,OUTCHAR - jp OUTBL + rl b + jp c,OUTCHAR + jp OUTBL prnt_regs: - push bc - push de - call PSTR - ld a,'=' - call OUTCHAR - ex (sp),hl - ld e,(hl) - inc hl - ld d,(hl) - inc hl - ld a,(hl) - inc hl - push hl - and a - jr z,l0df2h - push af - ld a,(de) - ld l,a - inc de - ld a,(de) - ld h,a - pop af - dec a - jr z,l0dedh - call out.hl.@ - call z,outbl6 - jr l0df6h + push bc + push de + call PSTR + ld a,'=' + call OUTCHAR + ex (sp),hl + ld e,(hl) + inc hl + ld d,(hl) + inc hl + ld a,(hl) + inc hl + push hl + and a + jr z,l0df2h + push af + ld a,(de) + ld l,a + inc de + ld a,(de) + ld h,a + pop af + dec a + jr z,l0dedh + call out.hl.@ + call z,outbl6 + jr l0df6h l0dedh: - call out.hl - jr l0df6h + call out.hl + jr l0df6h l0df2h: - ld a,(de) - call out.hex + ld a,(de) + call out.hex l0df6h: - call OUTBL - pop de - pop hl - pop bc + call OUTBL + pop de + pop hl + pop bc ret b_0x0DFD_start: @@ -1419,234 +1420,234 @@ b_0x0DFD_start: DB 0 b_0x0E1D_start: - defw reg.a - defb 000h - defw reg.c - defb 001h - defw reg.e - defb 001h - defw reg.l - defb 001h - defw reg.sp - defb 001h - defw reg.pc - defb 002h - defw reg.a2 - defb 000h - defw reg.c2 - defb 001h - defw reg.e2 - defb 001h - defw reg.l2 - defb 001h - defw reg.ix - defb 001h - defw reg.iy - defb 001h - defw reg.i + defw reg.a + defb 000h + defw reg.c + defb 001h + defw reg.e + defb 001h + defw reg.l + defb 001h + defw reg.sp + defb 001h + defw reg.pc + defb 002h + defw reg.a2 + defb 000h + defw reg.c2 + defb 001h + defw reg.e2 + defb 001h + defw reg.l2 + defb 001h + defw reg.ix + defb 001h + defw reg.iy + defb 001h + defw reg.i dw 0 CMD.G: - sub a - ld (TCFLG),a - ld (XA747),a - call EXPR - jr c,l0e54h - ld (REG.PC),hl + sub a + ld (TCFLG),a + ld (XA747),a + call EXPR + jr c,l0e54h + ld (REG.PC),hl l0e54h: - call SKIPBL - jp z,l1183h - cp ';' - jp nz,ERROR - inc de - ld a,002h - call sub_0f24h - jp l1183h + call SKIPBL + jp z,l1183h + cp ';' + jp nz,ERROR + inc de + ld a,002h + call sub_0f24h + jp l1183h sub_0e68h: - ld b,BP_CNT - ld ix,bp_tab + ld b,BP_CNT + ld ix,bp_tab l0e6eh: - ld a,(ix+000h) - and 0f1h - ld (ix+000h),a - call sub_11c5h - ld de,BP_SIZE - add ix,de - djnz l0e6eh + ld a,(ix+000h) + and 0f1h + ld (ix+000h),a + call sub_11c5h + ld de,BP_SIZE + add ix,de + djnz l0e6eh ret CMD.B: - call SKIPBL - jr z,l0ecbh - inc de - cp 'X' - jr z,l0e91h - dec de - ld a,001h - jp sub_0f24h + call SKIPBL + jr z,l0ecbh + inc de + cp 'X' + jr z,l0e91h + dec de + ld a,001h + jp sub_0f24h l0e91h: - call SKIPBL - jr z,l0ea6h + call SKIPBL + jr z,l0ea6h l0e96h: - call EXPR - jp c,assert_eol - push de - call sub_0ea7h - pop de - call skip_to_nextarg - jr l0e96h + call EXPR + jp c,assert_eol + push de + call sub_0ea7h + pop de + call skip_to_nextarg + jr l0e96h l0ea6h: scf sub_0ea7h: - ld b,BP_CNT - ld ix,bp_tab + ld b,BP_CNT + ld ix,bp_tab l0eadh: - push af - jr c,l0ebbh - ld e,(ix+002h) - ld d,(ix+003h) - call CP.HL.DE - jr nz,l0ec2h + push af + jr c,l0ebbh + ld e,(ix+002h) + ld d,(ix+003h) + call CP.HL.DE + jr nz,l0ec2h l0ebbh: - ld (ix+000h),000h - call sub_11c5h + ld (ix+000h),000h + call sub_11c5h l0ec2h: - ld de,BP_SIZE - add ix,de - pop af - djnz l0eadh + ld de,BP_SIZE + add ix,de + pop af + djnz l0eadh ret l0ecbh: - ld b,BP_CNT - ld ix,bp_tab + ld b,BP_CNT + ld ix,bp_tab l0ed1h: - bit 0,(ix+000h) - jr z,l0f1ch - ld a,'R' - bit 4,(ix+000h) - jr nz,l0ee1h - ld a,' ' + bit 0,(ix+000h) + jr z,l0f1ch + ld a,'R' + bit 4,(ix+000h) + jr nz,l0ee1h + ld a,' ' l0ee1h: - call OUTCHAR - call OUTBL - ld l,(ix+002h) - ld h,(ix+003h) - call out.hl.@ - call outbl2 - ld a,':' - call OUTCHAR - ld l,(ix+004h) - ld h,(ix+005h) - call out.hl - ld l,(ix+006h) - ld h,(ix+007h) - ld a,h - or l - jr z,l0f19h - call outbl4 - ld a,'I' - call OUTCHAR - call outbl2 - call PSTR + call OUTCHAR + call OUTBL + ld l,(ix+002h) + ld h,(ix+003h) + call out.hl.@ + call outbl2 + ld a,':' + call OUTCHAR + ld l,(ix+004h) + ld h,(ix+005h) + call out.hl + ld l,(ix+006h) + ld h,(ix+007h) + ld a,h + or l + jr z,l0f19h + call outbl4 + ld a,'I' + call OUTCHAR + call outbl2 + call PSTR l0f19h: - call CRLF + call CRLF l0f1ch: - ld de,BP_SIZE - add ix,de - djnz l0ed1h + ld de,BP_SIZE + add ix,de + djnz l0ed1h ret sub_0f24h: - ld b,a - call SKIPBL - ret z - cp 'R' - jr nz,l0f30h - inc de - set 4,b + ld b,a + call SKIPBL + ret z + cp 'R' + jr nz,l0f30h + inc de + set 4,b l0f30h: - push bc - call EXPR - jp c,ERROR - pop bc - bit 0,b - push bc - push de - push hl - call nz,sub_0ea7h - pop hl - call sub_0f68h - pop de - ld (ix+002h),l - ld (ix+003h),h - call sub_0f80h - ld (ix+004h),l - ld (ix+005h),h - call sub_0f91h - ld (ix+006h),l - ld (ix+007h),h - call skip_to_nextarg - pop af - ld (ix+000h),a - and 00fh - jr sub_0f24h + push bc + call EXPR + jp c,ERROR + pop bc + bit 0,b + push bc + push de + push hl + call nz,sub_0ea7h + pop hl + call sub_0f68h + pop de + ld (ix+002h),l + ld (ix+003h),h + call sub_0f80h + ld (ix+004h),l + ld (ix+005h),h + call sub_0f91h + ld (ix+006h),l + ld (ix+007h),h + call skip_to_nextarg + pop af + ld (ix+000h),a + and 00fh + jr sub_0f24h sub_0f68h: - ld b,BP_CNT - ld ix,bp_tab + ld b,BP_CNT + ld ix,bp_tab l0f6eh: - ld a,(ix+000h) - and 00fh - ret z - push bc - ld bc,BP_SIZE - add ix,bc - pop bc - djnz l0f6eh - jp ERROR + ld a,(ix+000h) + and 00fh + ret z + push bc + ld bc,BP_SIZE + add ix,bc + pop bc + djnz l0f6eh + jp ERROR sub_0f80h: - call SKIPBL - ld hl,1 - cp 03ah - ret nz - inc de - call EXPR - jp c,ERROR + call SKIPBL + ld hl,1 + cp 03ah + ret nz + inc de + call EXPR + jp c,ERROR ret sub_0f91h: - call SKIPBL - cp 049h - ld hl,0 - ret nz - inc de - call SKIPBL - push de - call EXPR - jp c,ERROR - ex de,hl - pop de - push de - sbc hl,de - ld b,h - ld c,l - ld hl,(sexp1) - push hl - add hl,bc - ld de,sexpbufe - call CP.HL.DE - jp nc,ERROR - pop hl - ld (sexp2),hl - pop de - ex de,hl + call SKIPBL + cp 049h + ld hl,0 + ret nz + inc de + call SKIPBL + push de + call EXPR + jp c,ERROR + ex de,hl + pop de + push de + sbc hl,de + ld b,h + ld c,l + ld hl,(sexp1) + push hl + add hl,bc + ld de,sexpbufe + call CP.HL.DE + jp nc,ERROR + pop hl + ld (sexp2),hl + pop de + ex de,hl ldir - xor a - ld (de),a - inc de - ex de,hl - ld (sexp1),hl - ld hl,(sexp2) + xor a + ld (de),a + inc de + ex de,hl + ld (sexp1),hl + ld hl,(sexp2) ret bpddtz: @@ -4752,6 +4753,7 @@ b_0x2108_start: ; 1 byte opcodes defb 029h defw l254bh + defb 0c7h ;216c inc r defb 004h defb 041h diff --git a/z180/z180reg.inc b/z180/z180reg.inc index 271a446..a248f5f 100644 --- a/z180/z180reg.inc +++ b/z180/z180reg.inc @@ -24,7 +24,7 @@ cntla1 equ IOBASE+01h ;ASCI Control Register A Channel 1 b2m MPBR, 3 ;Multiprocessor Bit Receive (Read) b2m EFR, 3 ;Error Flag Reset (Write) b2m MOD2, 2 ;Data Format Mode 1 = 8-Bit data - b2m NOD1, 1 ;1 = Parity enabled + b2m MOD1, 1 ;1 = Parity enabled b2m MOD0, 0 ;1 = 2 stop bits cntlb0 equ IOBASE+02h ;ASCI Control Register B Channel 0 -- 2.39.2