From bb2a68e066bc818701eeb25ba0b239137844ff26 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sat, 31 Dec 2022 11:22:34 +0800 Subject: [PATCH] Update romldr.asm --- Source/HBIOS/romldr.asm | 103 ++++++++++++++++++---------------------- 1 file changed, 46 insertions(+), 57 deletions(-) diff --git a/Source/HBIOS/romldr.asm b/Source/HBIOS/romldr.asm index d27c823b..51441a62 100644 --- a/Source/HBIOS/romldr.asm +++ b/Source/HBIOS/romldr.asm @@ -505,11 +505,11 @@ setcon: push de ; for a matching entry ld de,tbl_baud nextbaud: - ex de,hl ; hl = tbl_baud, de = msb - ld a,d - cp (hl) - inc hl - jr nz,mm1 + ex de,hl ; hl = tbl_baud, de = msw + ld a,d ; check all four bytes + cp (hl) ; against HL:BC + inc hl ; exit to next table + jr nz,mm1 ; entry on mismatch ld a,e cp (hl) inc hl @@ -532,10 +532,10 @@ nextbaud: mm1: inc hl mm2: inc hl mm3: inc hl -mm4: ex (sp),hl ; hl= count value, stack= tbl_baud, de=msb +mm4: ex (sp),hl ; hl = count value, stack = tbl_baud, de = msw dec l - ex (sp),hl ; hl=tbl_baud, stack= count - ex de,hl ; hl = msb, de = tbl_baud + ex (sp),hl ; hl = tbl_baud, stack= count + ex de,hl ; hl = msw, de = tbl_baud jr nz,nextbaud ; ; Failed to match @@ -601,8 +601,8 @@ docon: ld hl,str_newcon ; new console msg ; Get numeric chars at DE and convert to BCD number returned in HL:BC ;======================================================================= ; -getbnum:ld bc,0 ; lsb - ld hl,0 ; msb +getbnum:ld bc,0 ; lsw + ld hl,0 ; msw getbnum1: ld a,(de) ; get the active char cp '0' ; compare to ascii '0' @@ -615,8 +615,8 @@ getbnum1: push de ; save char posn push hl ; save hl bcd ; - ld hl,tmpbcd - ld (hl),c + ld hl,tmpbcd ; rotate 1 nyble in A + ld (hl),c ; through HL:BC rld ld c,(hl) ld (hl),b @@ -640,58 +640,47 @@ getbnum2: or a ; with flags set, CF is cleared ret ; -tmpbcd: .db 0 +tmpbcd: .db 0 ; -#DEFINE LW(a,b,c,d,e,f,g) \ +#DEFINE PACK(a,b,c,d,e,f,g) \ #DEFCONT \ .db (16*('0'-'0'))+(a-'0')) #DEFCONT \ .db (16*(b-'0'))+(c-'0')) #DEFCONT \ .db (16*(d-'0'))+(e-'0')) #DEFCONT \ .db (16*(f-'0'))+(g-'0')) ; tbl_baud: - LW('0','0','0','0','0','7','5') - LW('0','0','0','0','1','5','0') - LW('0','0','0','0','2','2','5') - LW('0','0','0','0','3','0','0') - LW('0','0','0','0','4','5','0') - LW('0','0','0','0','6','0','0') - LW('0','0','0','0','9','0','0') - LW('0','0','0','1','2','0','0') - LW('0','0','0','1','8','0','0') - LW('0','0','0','2','4','0','0') - LW('0','0','0','3','6','0','0') - LW('0','0','0','4','8','0','0') - LW('0','0','0','7','2','0','0') - LW('0','0','0','9','6','0','0') - LW('0','0','1','4','4','0','0') - LW('0','0','1','9','2','0','0') - LW('0','0','2','8','8','0','0') - LW('0','0','3','8','4','0','0') - LW('0','0','5','7','6','0','0') - LW('0','0','7','6','8','0','0') - LW('0','1','1','5','2','0','0') - LW('0','1','5','3','6','0','0') - LW('0','2','3','0','4','0','0') - LW('0','3','0','7','2','0','0') - LW('0','4','6','0','8','0','0') - LW('0','6','1','4','4','0','0') - LW('0','9','2','1','6','0','0') - LW('1','2','2','8','8','0','0') - LW('1','8','4','3','2','0','0') - LW('2','4','5','7','6','0','0') - LW('3','6','8','6','4','0','0') - LW('7','3','7','2','8','0','0') -; -;------|----------|------|----------|------|----------|------|----------| -; 0 | 75 | 8 | 1800 | 16 | 28800 | 24 | 460800 | -; 1 | 150 | 9 | 2400 | 17 | 38400 | 25 | 614400 | -; 2 | 225 | 10 | 3600 | 18 | 57600 | 26 | 921600 | -; 3 | 300 | 11 | 4800 | 19 | 76800 | 27 | 1228800 | -; 4 | 450 | 12 | 7200 | 20 | 115200 | 28 | 1843200 | -; 5 | 600 | 13 | 9600 | 21 | 153600 | 29 | 2457600 | -; 6 | 900 | 14 | 14400 | 22 | 230400 | 30 | 3686400 | -; 7 | 1200 | 15 | 19200 | 23 | 307200 | 31 | 7372800 | -;------------------------------------------------------------------------ + PACK('0','0','0','0','0','7','5') ; 75 0 > 0 + PACK('0','0','0','0','1','5','0') ; 150 1 > 1 + PACK('0','0','0','0','2','2','5') ; 225 2 > 16 + PACK('0','0','0','0','3','0','0') ; 300 3 > 2 + PACK('0','0','0','0','4','5','0') ; 450 4 > 17 + PACK('0','0','0','0','6','0','0') ; 600 5 > 3 + PACK('0','0','0','0','9','0','0') ; 900 6 > 18 + PACK('0','0','0','1','2','0','0') ; 1200 7 > 4 + PACK('0','0','0','1','8','0','0') ; 1800 8 > 19 + PACK('0','0','0','2','4','0','0') ; 2400 9 > 5 + PACK('0','0','0','3','6','0','0') ; 3600 10 > 20 + PACK('0','0','0','4','8','0','0') ; 4800 11 > 6 + PACK('0','0','0','7','2','0','0') ; 7200 12 > 21 + PACK('0','0','0','9','6','0','0') ; 9600 13 > 7 + PACK('0','0','1','4','4','0','0') ; 14400 14 > 22 + PACK('0','0','1','9','2','0','0') ; 19200 15 > 8 + PACK('0','0','2','8','8','0','0') ; 28800 16 > 23 + PACK('0','0','3','8','4','0','0') ; 38400 17 > 9 + PACK('0','0','5','7','6','0','0') ; 57600 18 > 24 + PACK('0','0','7','6','8','0','0') ; 76800 19 > 10 + PACK('0','1','1','5','2','0','0') ; 115200 20 > 25 + PACK('0','1','5','3','6','0','0') ; 153600 21 > 11 + PACK('0','2','3','0','4','0','0') ; 230400 22 > 26 + PACK('0','3','0','7','2','0','0') ; 307200 23 > 12 + PACK('0','4','6','0','8','0','0') ; 460800 24 > 27 + PACK('0','6','1','4','4','0','0') ; 614400 25 > 13 + PACK('0','9','2','1','6','0','0') ; 921600 26 > 28 + PACK('1','2','2','8','8','0','0') ; 1228800 27 > 14 + PACK('1','8','4','3','2','0','0') ; 1843200 28 > 29 + PACK('2','4','5','7','6','0','0') ; 2457600 29 > 15 + PACK('3','6','8','6','4','0','0') ; 3686400 30 > 30 + PACK('7','3','7','2','8','0','0') ; 7372800 31 > 31 ; #endif ;