Compare commits

...

2 Commits

Author SHA1 Message Date
Virgil Dupras dabbd6c253 8086asm: add support for modrm 8-bit displacement 2020-06-15 06:52:47 -04:00
Virgil Dupras d8d2e05eb2 pcat: make find compare strings
find is the biggest chunk of logic of the boot code. The 8086 version
is significantly terser than the z80 one. REP/CMPS helps...
2020-06-15 06:23:19 -04:00
10 changed files with 45 additions and 30 deletions

View File

@ -6,7 +6,7 @@ Mnemonics are followed by argument types. For example, MOVri,
moves 8-bit immediate to 8-bit register.
'r' = 8-bit register 'x' = 16-bit register
'i' = immediate, size depends on other operand.
'i' = 8-bit immediate 'I' = 16-bit immediate
's' = SREG register
Mnemonics that only have one signature (for example INT,) don't

View File

@ -1,11 +1,16 @@
: OPrm CREATE C, DOES> C@ A, SWAP 3 LSHIFT OR A, ;
0x8a OPrm MOVr[], 0x8b OPrm MOVx[],
: OPrm+ ( r m off ) CREATE C, DOES>
C@ A, ROT 3 LSHIFT ROT OR 0x40 OR A, A, ;
0x8a OPrm+ MOVr[]+, 0x8b OPrm+ MOVx[]+,
: MOVri, SWAP 0xb0 OR A, A, ;
: MOVxi, SWAP 0xb8 OR A, A,, ;
: MOVxI, SWAP 0xb8 OR A, A,, ;
: MOVsx, 0x8e A, SWAP 3 LSHIFT OR 0xc0 OR A, ;
: MOVxm, 0x8b A, SWAP 3 LSHIFT 0x6 OR A, A,, ;
: INT, 0xcd A, A, ;
: ADDAXi, 0x05 A, A,, ; : ADDALi, 0x04 A, A, ;
: ADDAXI, 0x05 A, A,, ; : ADDALi, 0x04 A, A, ;
: SUBxi, 0x83 A, SWAP 0xe8 OR A, A, ;
: JMPr, 0xff A, 7 AND 0xe0 OR A, ;
: JMPf, ( seg off ) 0xea A, SPLITB A, A, A,, ;

View File

@ -2,9 +2,9 @@ H@ ORG ! 0x7c00 BIN( ! ( BIOS loads boot bin at 0x7c00 )
JMPs, L1 FWRs ( start )
ORG @ 0x25 + HERE ! ( bypass BPB )
L1 FSET ( start )
CLI, CLD, AX 0x800 MOVxi, DS AX MOVsx, ES AX MOVsx,
SS AX MOVsx, SP 0xffff MOVxi, STI,
AH 2 MOVri, DX 0 MOVxi, CH 0 MOVri, CL 2 MOVri, AL 1 MOVri,
BX 0 MOVxi, 0x13 INT, ( read 2nd sector of boot floppy )
CLI, CLD, AX 0x800 MOVxI, DS AX MOVsx, ES AX MOVsx,
SS AX MOVsx, SP 0xffff MOVxI, STI,
AH 2 MOVri, DX 0 MOVxI, CH 0 MOVri, CL 2 MOVri, AL 1 MOVri,
BX 0 MOVxI, 0x13 INT, ( read 2nd sector of boot floppy )
0x800 0 JMPf,
ORG @ 0x1fe + HERE ! 0x55 A, 0xaa A,

View File

@ -5,7 +5,7 @@ JMPn, 0 A,, ( 00, main ) JMPn, 0 A,, ( 03, find )
0 A, ( 0a, unused ) JMPn, 0 A,, ( 0b, cellWord )
JMPn, 0 A,, ( 0e compiledWord ) JMPn, 0 A,, ( 11, pushRS )
JMPn, 0 A,, ( 14, popRS )
BX JMPr, ( 17, nativeWord ) 0 A,
DI JMPr, ( 17, nativeWord ) 0 A,
JMPn, 0 A,, ( 1a, next ) JMPn, 0 A,, ( 1d, unused )
0 A, 0 A, ( 20, numberWord ) 0 A, 0 A, ( 22, litWord )
0 A, 0 A, ( 24, addrWord ) 0 A, 0 A, ( 26, unused )

View File

@ -9,5 +9,5 @@ H@ XCURRENT ! ( set current tip of dict, 0x42 )
;CODE
CODE FOO
AH 0x0e MOVri, ( print char ) AL 'X' MOVri, 0x10 INT,
L2 BSET JMPs, L2 @ RPCs,
BEGIN, JMPs, AGAIN,
;CODE

View File

@ -1,5 +1,5 @@
L1 BSET PC 3 - ORG @ 0x34 + ! ( execute -- BX -> wordref )
L1 BSET PC 3 - ORG @ 0x34 + ! ( execute -- DI -> wordref )
AH AH XORrr,
AL [BX] MOVr[],
BX INCx, ( PFA )
AL [DI] MOVr[],
DI INCx, ( PFA )
AX JMPr,

24
blk/815
View File

@ -1,14 +1,16 @@
L4 BSET PC 3 - ORG @ 4 + ! ( find )
( find word the same name as str in SI starting from tip in
BX. Returns wordref in BX. Z if found, NZ if not. )
DI. Returns wordref in BX. Z if found, NZ if not. )
CH CH XORrr, CL [SI] MOVr[], ( CX -> strlen )
SI INCx,
AX AX XORxx, ( initial prev )
BEGIN, ( inner )
BX AX SUBxx, ( jump to prev wordref )
BX DECx, AL [BX] MOVr[], ( strlen )
CL AL CMPrr, IFZ, BX INCx, RETn, THEN,
BX DECx, BX DECx, AX [BX] MOVx[], ( prev )
AX AX ORxx,
JNZ, AGAIN,
BEGIN, JMPs, AGAIN,
SI INCx, ( first char ) AX AX XORxx, ( initial prev )
BEGIN, ( loop )
DI AX SUBxx, ( jump to prev wordref )
AL [DI] -1 MOVr[]+, ( strlen )
CL AL CMPrr, IFZ, ( same len )
SI PUSHx, DI PUSHx, CX PUSHx, ( --> lvl 3 )
3 ADDALi, ( header ) AH AH XORrr, DI AX SUBxx,
REPZ, CMPSB,
CX POPx, DI POPx, SI POPx, ( <-- lvl 3 )
IFZ, AL AL XORrr, ( Z ) RETn, THEN,
THEN,
( cont. )

12
blk/816
View File

@ -1,6 +1,6 @@
L3 BSET 3 A, 'F' A, 'O' A, 'O' A,
PC 3 - ORG @ 1+ ! ( main )
BX 0x08 MOVxm, ( LATEST )
SI L3 @ MOVxi,
CALLn, L4 @ RPCn, ( find )
JMPs, L1 @ RPCs, ( execute )
( find cont. )
DI 3 SUBxi, AX [DI] MOVx[], ( prev )
AX AX ORxx,
JNZ, AGAIN, ( loop )
AX INCx, ( NZ ) RETn,

8
blk/817 Normal file
View File

@ -0,0 +1,8 @@
L3 BSET 3 A, 'F' A, 'O' A, 'O' A,
PC 3 - ORG @ 1+ ! ( main )
DI 0x08 MOVxm, ( LATEST )
SI L3 @ MOVxI,
CALLn, L4 @ RPCn, ( find )
IFZ, JMPs, L1 @ RPCs, ( execute ) THEN,
AH 0x0e MOVri, ( print char ) AL '!' MOVri, 0x10 INT,
BEGIN, JMPs, AGAIN,

View File

@ -1,7 +1,7 @@
750 LOAD ( 8086 asm )
262 LOAD ( xcomp )
270 LOAD ( xcomp overrides )
812 816 LOADR
812 817 LOADR
(entry) _
( Update LATEST )
PC ORG @ 8 + !