From 333c5efba461036dc34e8ee4b847be000366ed1e Mon Sep 17 00:00:00 2001 From: Ilya Kurdyukov <59548320+ilyakurdyukov@users.noreply.github.com> Date: Sat, 12 Jun 2021 17:23:06 +0700 Subject: [PATCH] smaller Intern function --- sectorlisp.S | 68 +++++++++++++++++++++++++--------------------------- start.S | 10 ++++---- 2 files changed, 36 insertions(+), 42 deletions(-) diff --git a/sectorlisp.S b/sectorlisp.S index 41fbddb..b00acd0 100644 --- a/sectorlisp.S +++ b/sectorlisp.S @@ -18,9 +18,9 @@ ╚─────────────────────────────────────────────────────────────────────────────*/ // @fileoverview lisp.c built for real mode with manual tuning -// binary footprint is approximately 960 bytes, about 40 bytes +// binary footprint is approximately 824 bytes, about 40 bytes // of it is overhead needed to load the second 512-byte sector -// so if we can find a way to reduce the code size another 400 +// so if we can find a way to reduce the code size another 300 // bytes we can bootstrap the metacircular evaluator in an mbr #define NIL 0 @@ -139,37 +139,33 @@ GetObject: Intern: mov %di,%bx mov $STR,%si -0: lodsb - test %al,%al - je 4f - xor %dx,%dx -1: mov %dx,%di - mov (%bx,%di),%cl - cmp %cl,%al - jne 3f - inc %dx +0: mov %bx,%di + push %si + lodsb test %al,%al jne 2f - sub %di,%si - lea -STR-1(%si),%ax - jmp 6f -2: lodsb - jmp 1b + pop %di + push %di + mov %bx,%si +4: lodsb + stosb + test %al,%al + jnz 4b +6: pop %ax + sub $STR,%ax + shl %ax + ret +1: lodsb +2: scasb + jne 5f + test %al,%al + jne 1b + jmp 6b +5: pop %di 3: test %al,%al jz 0b lodsb jmp 3b -4: lea -1(%si),%di - push %di - mov %bx,%si -0: lodsb - stosb - test %al,%al - jnz 0b - pop %ax - sub $STR,%ax -6: shl %ax - ret GetList:call GetToken mov q.token,%al @@ -250,6 +246,15 @@ PrintString: # nul-terminated in si jmp 0b 1: ret +PutChar:push %bx # don't clobber bp,bx,di,si,cx + push %bp # original ibm pc scroll up bug + mov $7,%bx # normal mda/cga style page zero + mov $0x0e,%ah # teletype output al cp437 + int $0x10 # vidya service + pop %bp # preserves al + pop %bx + ret + //////////////////////////////////////////////////////////////////////////////// .text @@ -283,15 +288,6 @@ PrintObject: // jmp PutChar // 𝑠𝑙𝑖𝑑𝑒 -PutChar:push %bx # don't clobber bp,bx,di,si,cx - push %bp # original ibm pc scroll up bug - mov $7,%bx # normal mda/cga style page zero - mov $0x0e,%ah # teletype output al cp437 - int $0x10 # vidya service - pop %bp # preserves al - pop %bx - ret - Arg1ds: mov %dx,%di mov %bp,%si // 𝑠𝑙𝑖𝑑𝑒 diff --git a/start.S b/start.S index 5407596..5d311e8 100644 --- a/start.S +++ b/start.S @@ -24,14 +24,12 @@ _start: jmp 1f # some bios scan for short jump 1: ljmp $0x600>>4,$_begin # end of bios data roundup page _begin: push %cs # memory model cs=ds=es = 0x600 - pop %ds push %cs + push %cs + pop %ds pop %es - mov $0x70000>>4,%ax # last 64k of first 480k memory - cli # create stack in higher memory - mov %ax,%ss # carefully avoids i8086 errata - xor %sp,%sp - sti + pop %ss + mov $0x70000>>4,%sp cld xor %ax,%ax xor %di,%di